https://developer.android.com/reference/android/view/View.OnClickListener.html#

https://blog.csdn.net/jamesli6/article/details/52189006

这个类这一个方法;

使用:

在view对象,及其子类对象都有这个方法:他的参数就是OnclickListener的对象。注意不止button。

setOnClickListener(View.OnClickListener l)

Register a callback to be invoked(调用) when this view is clicked.

Interface definition for a callback to be invoked when a view is clicked.

Public methods


onClick

added in API level 1
void onClick (View v)

Called when a view has been clicked.

Parameters
v View: The view that was clicked.

使用

1. 使用匿名内部类的方式实现监听事件

使用方法:

  1. 首先为要实现监听的对象绑定监听器,例如为一个Button对象绑定一个监听器botton.setOnClickListener();
  2. 然后在setOnClickListener()方法中定义一个OnClickListener的匿名内部类,然后重写内部类中的onClick方法。
  3. 最后在onClick方法中实现监听事件要实现的逻辑即可。

优点有:

1.可以在当前类中复用该监听器类

2.可以自由访问外部类的所有界面组件

  1. b1.setOnClickListener(new OnClickListener(){
  2. @Override
  3. public void onClick(View v) {
  4. // TODO Auto-generated method stub
  5. Intent intet = new Intent(MainActivity.this,seekbar.class);
  6. startActivity(intet);
  7. //finish();
  8. }
  9. });

2. 使用外部类的方式实现监听事件

使用方法:

  1. 首先要自定义一个外部类,实现OnClickListener接口,并重写onClick方法,在onClick方法中可以定义这个外部类想实现的处理逻辑,那么调用这个外部类实现监听事件时,都可以用super来调用这个类中的处理逻辑。这也是使用外部类实现监听事件的优势所在:可以将不同监听事件中大量重复的处理逻辑定义在这个类中,然后使用这个外部类实现监听事件时都可以使用super关键字来直接调用,而不用重复定义,减少重复代码,提高代码质量。
  2. 为要实现监听的对象绑定监听器,然后在setOnClickListener()方法中使用我们自定义的外部类来实现监听事件。
  3. 重写onClick方法,并根据需要来决定是否需要使用super调用父类处理逻辑,并在onClick方法中定义自己的处理逻辑。

比较少见,其中优点为:

1.当某个事件监听器被多个GUI界面共享,且主要是完成某种业务逻辑的实现

其中确定为:

1.不利于提高程序的内聚性

2.不能自由访问创建GUI界面类的组件,编程不够简洁

这个类很简单,实现OnClickListener并复写onClick方法即可,外部类监听点击事件实际中用的不多,但如果以后做到好几十个按钮点下

去要产生相同的动画效果,就可以把动画效果放到外部内里面

  1. Button buttonup=(Button)findViewById(R.id.btn_signup);
  2. buttonin.setOnClickListener(new MyOnClicklistener() {
  3. public void onClick(View v) {
  4. //noinspection ConstantConditions
  5. super.onClick(v);
  6. Toast.makeText(MainActivity.this,"点击了登录",Toast.LENGTH_LONG).show();
  7. }
  8. });
  9. buttonup.setOnClickListener(new MyOnClicklistener() {
  10. public void onClick(View v) {
  11. //noinspection ConstantConditions
  12. super.onClick(v);
  13. Toast.makeText(MainActivity.this,"点击了注册",Toast.LENGTH_LONG).show();
  14. }
  15. });
  16. class MyOnClicklistener implements View.OnClickListener {
  17. public void onClick(View v) {
  18. //让所有使用当前外部类的点击事件的按钮都要做出一个动作,改变button本身
  19. v.setAlpha(0.5f);
  20. }

3. 使用接口方式实现监听事件

可以直接在Activity中定义事件处理方法

其中优点为:非常简洁

缺点为:

1.这种形式可能造成程序结构混乱。Activity的主要职责应该是完成界面初始化;但此时还需包含事件处理器方法,从而引起混乱

2.如果activity界面类需要实现监听器接口,让人感觉比较怪异

  1. public class ActivityListener extends Activity implements OnClickListener {
  2. private EditText show;
  3. private Button bn;
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.main);
  8. show = (EditText)findViewById(R.id.show);
  9. bn = (Button)findViewById(R.id.bn);
  10. bn.setOnClickListener(this);
  11. }
  12. @Override
  13. public void onClick(View v) {
  14. // TODO Auto-generated method stub
  15. show.setText("按钮被单击了!");
  16. }

4.直接绑定到标签

在布局中要发送事件源中定义一个:

android:onClick="clickHandler"

然后在该布局对应的Activity定义一个 void clickHandler(void source)方法

5.多个按钮,用view.id来区别,只要传view就可以;

  1. super.onCreate(savedInstanceState);
  2. setContentView(R.layout.activity_main_dialog);
  3. b1=(Button)findViewById(R.id.button1);
  4. b2=(Button)findViewById(R.id.button2);
  5. b3=(Button)findViewById(R.id.button3);
  6. b4=(Button)findViewById(R.id.button4);
  7. b5=(Button)findViewById(R.id.button5);
  8. b1.setOnClickListener(new ButtonListener());
  9. b2.setOnClickListener(new ButtonListener());
  10. b3.setOnClickListener(new ButtonListener());
  11. b4.setOnClickListener(new ButtonListener());
  12. b5.setOnClickListener(new ButtonListener());
  13. }
  14. private class ButtonListener implements OnClickListener{
  15. public void onClick(View v) {
  16. switch(v.getId()){
  17. case R.id.button1:
  18. ……
  19. break;
  20. case R.id.button2:
  21. ……
  22. break;
  23. default:
  24. break;
  25. }
  26. }
  27. }
 像spinner也可以这样区别:

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener ,View.OnClickListener{
private Spinner spinner; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Spinner spinner = (Spinner) findViewById(R.id.spinner);
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.planets_array, android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
spinner.setOnClickListener(this);
} @Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { } @Override
public void onNothingSelected(AdapterView<?> parent) { } @Override
public void onClick(View v) { }
}

最新文章

  1. ie6 z-index不起作用的解决方法
  2. C语言基础(3)-二进制、八进制、十六进制
  3. LeetCode记录(1)——Array
  4. c语言程序
  5. 蓝桥杯 BASIC_17 矩阵乘法 (矩阵快速幂)
  6. 在页面中使用Eval的两种方案
  7. [转]ldconfig几个需要注意的地方
  8. linux ubuntu 思源黑体安装
  9. 转:android 自定义RadioButton样式
  10. 线程:Exchanger同步工具
  11. asp.net js调用后台方法
  12. Redis常见的应用场景解析
  13. 微信小程序之菜鸟入门教学(二)
  14. idea integrate project
  15. open-falcon部署v0.2.1版本
  16. Sargable 与 谓语下推 (predicate pushdown) 简介
  17. Linux 创建 时间命名 文件
  18. 持续集成(Continuous Integration)基本概念与实践
  19. STL::unordered_map/unordered_multimap
  20. 工具IDEA 配置springboot+maven项目

热门文章

  1. visual studio tools for unity代码提示快捷键
  2. Convolutional Neural Networks for Visual Recognition 3
  3. 幻想乡三连A:五颜六色的幻想乡
  4. JavaScript RegExp 正则表达式基础详谈
  5. C#中如何设置日期格式
  6. UVA624(01背包记录路径)
  7. 上传下载,使用,commons-fileupload,commons-io来加载上传下载
  8. 【转】 Pro Android学习笔记(六六):安全和权限(3):Provider权限
  9. 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果
  10. Hdu 4762 网络赛 高精度大数模板+概率