博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发中Button按钮绑定监听器的方式完全解析
阅读量:4077 次
发布时间:2019-05-25

本文共 6859 字,大约阅读时间需要 22 分钟。

按钮绑定监听器的几种方式:

A:采用内部类的形式
1.自己创建一个内部类,实现OnClickListener接口,重写里面的onClick()方法.
2.在使用的地方创建一个内部类对象.
3.用button对象通过setOnClickListener(监听器对象)方法绑定监听器对象.

public class MainActivity extends Activity{
private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button); MyListenner listenner = new MyListenner(); //按钮绑定监听器 button.setOnClickListener(listenner); } //按钮的监听器是一个接口,所有不能直接创建对象 class MyListenner implements OnClickListener{
//当控件(在这里就是按钮)被点击当时候,会调用的方法 //v:事件源(谁触发了点击这个事件,谁就是事件源) 指代:当前被点击的按钮 @Override public void onClick(View v) { //TODO 做点击按钮要做的事 button.setText("点击了按钮"+new Date()); } }}

B.用当前类实现接口

1.用当前activity实现OnClickListener接口,重写里面的onClick()方法.
2.用button对象通过setOnClickListener(this)绑定监听器对象(当前的类对象).

public class MainActivity extends Activity implements View.OnClickListener{
private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button); button.setOnClickListener(this); } @Override public void onClick(View v) { button2.setText("用当前的类实现监听器"+new Date()); }}

C.采用匿名内部类的方式

1.用button对象通过setOnClickListener(创建接口的匿名内部类对象)绑定静听器对象.

public class MainActivity extends Activity {
private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @override public void onClick(View v) { button.setText("用匿名内部类的方式" + new Date()); } }); }

D.以属性的形式

1.在布局文件中,button的属性里定义onClick=”方法名”
2.在代码中声明格式是固定的:
public void 方法名(View v) {
方法体;
}
布局文件中写法:

代码:

public class MainActivity extends Activity {
private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button); } //格式是固定的 public void btnOnClick(View v) { button.setText("以属性的方式改变内容" + new Date()); }}

多个按钮同时绑定一个监听器:

A.采用内部类的形式:绑定监听器的时候,传同一个对象.
B.用当前类实现接口:绑定监听器的时候都传 this.
C.以属性的形式:写属性的时候onClick的值都写同一个方法名

采用内部类的形式:

public class SecondActivity extends Activity{
private Button btnChangColor,btnChangeText; private LinearLayout layout; private Random random;//获取随机数的类 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); btnChangColor = (Button) findViewById(R.id.btnChangColor); btnChangeText = (Button) findViewById(R.id.btnChangeText); layout = (LinearLayout) findViewById(R.id.layout); random = new Random(); CommonLis listener = new CommonLis(); btnChangColor.setOnClickListener(listener); btnChangeText.setOnClickListener(listener); } class CommonLis implements OnClickListener{
@Override public void onClick(View v) { int id = v.getId(); switch (id) { //改变背景颜色的按钮 case R.id.btnChangColor: //ff 255 int red = random.nextInt(256);//[0,255] int green = random.nextInt(256); int blue = random.nextInt(256); //设置背景颜色 layout.setBackgroundColor(Color.rgb(red, green,blue)); break; //改变文本信息的按钮 case R.id.btnChangeText: btnChangeText.setText("改变文本信息"+new Date()); //Toast Context:activity是它的子类 吐司要显示的内容 吐司显示的事件 Toast.makeText(SecondActivity.this, "改变的文本信息"+new Date(), 1).show(); break; default: break; } } }}

用当前类实现接口的形式:

public class SecondActivity extends Activity implements OnClickListener{
private Button btnChangColor,btnChangeText; private LinearLayout layout; private Random random = new Random();//获取随机数的类 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); btnChangColor = (Button) findViewById(R.id.btnChangColor); btnChangeText = (Button) findViewById(R.id.btnChangeText); layout = (LinearLayout) findViewById(R.id.layout); btnChangColor.setOnClickListener(this); btnChangeText.setOnClickListener(this); } @Override public void onClick(View v) { int id = v.getId(); switch (id) { //改变背景颜色的按钮 case R.id.btnChangColor: //ff 255 int red = random.nextInt(256);//[0,255] int green = random.nextInt(256); int blue = random.nextInt(256); //设置背景颜色 layout.setBackgroundColor(Color.rgb(red, green,blue)); break; //改变文本信息的按钮 case R.id.btnChangeText: btnChangeText.setText("改变文本信息"+new Date()); //Toast Context:activity是它的子类 吐司要显示的内容 吐司显示的事件 Toast.makeText(SecondActivity.this, "改变的文本信息"+new Date(), 1).show(); break; default: break; } }}

以属性的方式:

public class SecondActivity extends Activity implements OnClickListener{
private Button btnChangColor,btnChangeText; private LinearLayout layout; private Random random = new Random();//获取随机数的类 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); btnChangColor = (Button) findViewById(R.id.btnChangColor); btnChangeText = (Button) findViewById(R.id.btnChangeText); layout = (LinearLayout) findViewById(R.id.layout); } public void btnSure(View v) { int id = v.getId(); switch (id) { //改变背景颜色的按钮 case R.id.btnChangColor: //ff 255 int red = random.nextInt(256);//[0,255] int green = random.nextInt(256); int blue = random.nextInt(256); //设置背景颜色 layout.setBackgroundColor(Color.rgb(red, green,blue)); break; //改变文本信息的按钮 case R.id.btnChangeText: btnChangeText.setText("改变文本信息"+new Date()); //Toast Context:activity是它的子类 吐司要显示的内容 吐司显示的事件 Toast.makeText(SecondActivity.this, "改变的文本信息"+new Date(), 1).show(); break; default: break; } }}

转载地址:http://vzsni.baihongyu.com/

你可能感兴趣的文章
菜鸟专学:从头到尾创建自己的SLAM系统(转载,我觉这种自己写一个SLAM很好)
查看>>
C++之STL和Boost
查看>>
kubernetes节点与节点之间的通信是如何弄的?我想和ROS的对比一下
查看>>
kubernetes中文文档
查看>>
K8S 容器之间通讯方式
查看>>
我看Kubernetes的操作不需要图形界面,只需要命令行就可以了,所以买个云服务器就可以弄了应该。
查看>>
现在来看,做个普罗米修斯的docker镜像对我而言并不难,对PX4仿真环境配置也熟悉了。
查看>>
删除docker容器和镜像的命令
查看>>
Docker run 命令
查看>>
Docker容器的创建、启动、和停止
查看>>
XTDrone的docker仿真镜像使用注意
查看>>
对ROS/普罗米修斯中线程锁的使用的理解
查看>>
VINS-Fusion Intel® RealSense™ Depth Camera D435i
查看>>
使用Realsense D435i运行VINS-Fusion并建图
查看>>
realsense d435i 跑 vins-fusion
查看>>
在Intel nuc上配置D435i、运行VINS-Mono及问题记录
查看>>
视觉SLAM——D435i运行VINS-MONO
查看>>
Ubuntu添加和删除源
查看>>
最优化算法——常见优化算法分类及总结
查看>>
卡尔曼滤波有若干种推导方式
查看>>