【Android学习】按钮监听代码

1. 简介

Button组件是Android中常用的组件,Button常需要和View.OnClickListener配合使用。这里记录下Button配置监听的过程。

2. 代码分析 

2.1 Layout的XML代码

<Buttonandroid:id="@+id/btn"android:layout_width="match_parent"android:layout_height = "wrap_content"android:text = "hhh"android:textColor="@color/black"android:onClick="doClick"/>

可以看到Button中是可以放一个 android:onClick的属性,指定一个具体的click方法的,此种策略需要在Java代码中实现doClick方法,这样导致XML样式和Java逻辑形成了高耦合,这一般是程序开发过程中比较忌讳的,因此一般不这样来写,一般通过View.OnClickListener监听器实现Button的功能。

2.2 单个按钮时View.OnClickListener的示例代码

package com.example.learn;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = findViewById(R.id.tv_main);//ViewGroup.LayoutParams layoutParams = tv.getLayoutParams();//layoutParams.width = 100;//tv.setLayoutParams(layoutParams);Button btn = findViewById(R.id.btn);btn.setOnClickListener(new BtnListener(tv));}static class BtnListener implements View.OnClickListener{private final TextView tv;public BtnListener(TextView tv) {this.tv = tv;}@Overridepublic void onClick(View view) {String s =String.format("您点击了 %s",((Button)View).getText());tv.setText(s);}}
}

如以上代码,当单个按钮时可以用上述代码防止内存泄漏。这里需要指明,一般在OnCreate方法中需要将组件全部加载,这样在Activity的整个生命周期内,仅需要一次加载即可。不过此时有问题,如果有多个按钮时,需要多组btnListener的方法,这样显然影响开发效率。

2.3 多个按钮时View.OnClickListener的示例代码

package com.example.learn;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;public class MainActivity extends AppCompatActivity implements View.OnClickListener{private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = findViewById(R.id.tv_main);//ViewGroup.LayoutParams layoutParams = tv.getLayoutParams();//layoutParams.width = 100;//tv.setLayoutParams(layoutParams);Button btn = findViewById(R.id.btn);btn.setOnClickListener(this);Button btn1 = findViewById(R.id.btn1);btn1.setOnClickListener(this);}@Overridepublic void onClick(View view) {if(view.getId()==R.id.btn){//执行btn对应的操作}else if(view.getId()==R.id.btn1){//执行btn1对应的操作}}

以上是简单的示例代码,仅供学习和参考使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/5974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ThreeJS:响应式画布与全屏控制

响应式画布 响应式画布&#xff1a;在用户缩放浏览器窗口时&#xff0c;为便于动态更新画布尺寸与宽高比例&#xff0c;需要通过监听resize事件&#xff0c;来实现响应式画布。 window.onresize function () {//TODO:重置渲染器宽高比renderer.setSize(window.innerWidth, wi…

图文、视频处理等自媒体工具

文章目录 文本转文本图片canva同类竞品文本生成PDF,PDF再导出为图片贴入笔记类应用(如小米笔记App)中然后选择以图片形式分享UU在线工具的文字生成长图醒图App其他竞品文本转配音视频剪映将文本生成一段朗读该文本的配音视频(需要自行切割多段内容并分配时间轴)腾讯智影将…

为人处事电影解说,全新升级瀚海跑道一分钟一条视频,全平台可推广,轻轻松松日入1000

自古以来&#xff0c;我国流行的一种现象是&#xff0c;大多数人都会与领导或上司打交道。由于某些话题不宜公开讨论&#xff0c;因此出现了许多含蓄的表达方式。随着年龄的增长&#xff0c;人们的态度也发生了变化&#xff0c;从最初的轻视到现在的重视。 下 载 地 址&#…

VG做mirror引起的块偏移

事件起因 Oracle10.2环境 Aix操作系统使用aix的lvm技术。制作vg的mirror。以此来替换掉老的存储。 做mirror前&#xff0c;数据库已完全关闭 故障现象 在启动数据库时&#xff0c;发现IO错误。该系统的spfile&#xff0c;ctl&#xff0c;dbf均是用lv做的裸设备。其中dbf是使…

WebGL是啥

WebGL&#xff08;全写为Web Graphics Library&#xff09;是一种3D绘图协议&#xff0c;这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起&#xff0c;通过增加OpenGL ES 2.0的一个JavaScript绑定&#xff0c;WebGL可以为HTML5 Canvas提供硬件3D加速渲染。这样&…

【重学C语言】十二、指针高级-函数指针

【重学C语言】十二、指针高级-函数指针 函数指针小案例回调函数如何看懂复杂的指针右左法则案例走起1.int (\*p[5])(int\*)2. int (\*fun)(int \*p,int (\*pf)(int \*))3. int (\*(\*fun)[5])(int \*p)4. int (\*(\*fun)(int \*p))[5]5. int(\*(\*fun())())()函数指针 函数指针…

cmake的使用方法: 编译生成库文件

一. 简介 前面文章学习了针对单个 .c文件&#xff0c;cmake 工具是如何编译的&#xff1f; 针对包含多个 .c文件&#xff0c;cmake工具又是如何编译的&#xff1f;文章如下&#xff1a; cmake的使用方法: 单个源文件的编译-CSDN博客 cmake的使用方法: 多个源文件的编译-CS…

Java入门-final关键字

final关键字 修饰基本类型 变量为只读&#xff0c;不能修改变量的内容。 final int SIZE 3;修饰引用类型 引用的对象不能改变&#xff0c;但是对象的内容可以修改。 final Car c new Car( );c.setColor("红色");修饰类的属性 类的属性不能被修改。 第一种方式&…

Linux 进程间通信之命名管道

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux知识分享⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d; 目录 前言 命名管道 创建一个命名管道 …

Pandas库的基本使用

什么是Pandas? 一个开源的Python类库&#xff1a;用于数据分析、数据处理、数据可视化 高性能容易使用的数据结构容易使用的数据分析工具 很方便和其它类库一起使用&#xff1a; numpy&#xff1a;用于数学计算scikit-learn&#xff1a;用于机器学习 怎样下载安装Pandas …

Flask后端之建立模型类间的外键联系

1、模型类代码&#xff1a; 定义了三个模型类&#xff1a;User、Goods 和 Sign&#xff1a; class User(db.Model):__tablename__ userid db.Column(db.Integer, primary_keyTrue)name db.Column(db.String(100), nullableFalse)email db.Column(db.String(100), uniqueT…

商城数据库(36 37 38 39 40)

36 CREATE TABLE sxh_log_operates (operateId int(11) NOT NULL AUTO_INCREMENT COMMENT 自增ID,staffId int(11) NOT NULL DEFAULT 0 COMMENT 职员ID,operateTime datetime NOT NULL COMMENT 操作时间,menuId int(11) NOT NULL COMMENT 所属菜单ID,operateDesc varchar(255)…

UI自动化与接口自动化比较

UI自动化与接口自动化优比较&#xff1a; 1、执行效率 接口自动化执行效率比UI自动化执行效率更高(调用接口比打开页面要快很多) 2、稳定性 UI自动化容易受设备卡顿&#xff0c;系统弹框等因素影响而导致脚本执行失败、接口自动化不存在此问题&#xff0c;因此接口自动化测试…

ES常用查询方式

Elasticsearch&#xff08;ES&#xff09;作为功能强大的检索引擎&#xff0c;提供了多种查询方式&#xff0c;在不同的场景下需要选择合适的查询方式以取得最佳查询效果。 ES常用查询方式 方式说明Match Query&#xff08;匹配查询&#xff09;根据字段的内容进行全文匹配查…

Leetcode—976. 三角形的最大周长【简单】(ranges::sort函数)

2024每日刷题&#xff08;122&#xff09; Leetcode—976. 三角形的最大周长 实现代码 class Solution { public:int largestPerimeter(vector<int>& nums) {ranges::sort(nums);for(int i nums.size() - 1; i > 1; i--) {if(nums[i - 1] nums[i - 2] > nu…

洛谷 P1377 [TJOI2011]:树的序 ← 笛卡尔树

【题目来源】https://www.luogu.com.cn/problem/P1377【题目描述】 众所周知&#xff0c;二叉查找树的形态和键值的插入顺序密切相关。准确的讲&#xff1a; 1.空树中加入一个键值 k&#xff0c;则变为只有一个结点的二叉查找树&#xff0c;此结点的键值即为 k。 2.在非空树中插…

『大模型笔记』AI 智能体(Agent)在推理(Reasoning)、规划(Planning)与工具调度(Tool Calling)方面的研究:综合调查!

AI 智能体(Agent)在推理(Reasoning)、规划(Planning)与工具调度(Tool Calling)方面的研究:综合调查! 文章目录 o. 摘要一. Introduction1.1. Taxonomy(分类学)二. 关键考虑因素以实现有效的智能体2.1. 概述2.2. 推理和规划的重要性2.3. 有效工具调用的重要性三. 单智能体架…

智能物联网与Web3:连接未来数字生活的桥梁

随着科技的不断进步&#xff0c;智能物联网&#xff08;IoT&#xff09;和Web3技术正成为数字化时代的关键驱动力。智能物联网将各种物理设备连接到互联网&#xff0c;使其能够感知环境、收集数据并与其他设备通信&#xff0c;而Web3技术则以去中心化、安全性和透明性为核心&am…

Linux开发板 FTP 服务器移植与搭建

VSFTPD&#xff08;Very Secure FTP Daemon&#xff09;是一个安全、稳定且快速的FTP服务器软件&#xff0c;广泛用于Unix和Linux操作系统。它以其轻量级、高效和易于配置而受到赞誉。VSFTPD不仅支持标准的FTP命令和操作&#xff0c;还提供了额外的安全特性&#xff0c;如匿名F…

如何在前端展示后端返回的pdf Base64格式字符串

文章目录 如何在前端展示后端返回的pdf Base64格式字符串 如何在前端展示后端返回的pdf Base64格式字符串 // fileBase64 就是后端返回的 pdf Base64格式字符串getPdfDocument(fileBase64) {let fileBlob this.base64ToBlobsdf(fileBase64,application/pdf);let basePdfUrl …