android监听事件的三种实现方式

来源:互联网 发布:c语言99个例题 编辑:程序博客网 时间:2024/05/29 15:26

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

使用方法:

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

优点有:

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

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

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


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

使用方法:

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

比较少见,其中优点为:

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

其中确定为:

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

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

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

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

[java] view plain copy
  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.             }  
  10.         });  
  11.    
  12. buttonup.setOnClickListener(new MyOnClicklistener() {  
  13.     public void onClick(View v) {  
  14.                 //noinspection ConstantConditions  
  15.                 super.onClick(v);  
  16.           Toast.makeText(MainActivity.this,"点击了注册",Toast.LENGTH_LONG).show();  
  17.             }  
  18.         });  
  19.    
  20. class MyOnClicklistener implements View.OnClickListener {  
  21.         public void onClick(View v) {  
  22.             //让所有使用当前外部类的点击事件的按钮都要做出一个动作,改变button本身  
  23.             v.setAlpha(0.5f);  
  24.         }  


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

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

其中优点为:非常简洁

缺点为:

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

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

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