buder

20170828工作日记(二)事件监听器学习

 4.Android设置事件监听器的集中方式

基于监听的事件处理开发步骤

  1. 获取普通界面控件(事件源),即被监听的对象;
  2. 实现事件监听器类,该监听器类是一个特殊的 Java 类,必须实现一个 EventListener 接口。需要注意的是,实现事件监听器主要有四种形式:匿名内部类、内部类形式、外部类形式和 Activity 类自身作为事件监听器类。
  3. 调用事件源的 setEventListener 方法将事件监听器对象将事件监听器对象作为传入参数注册给普通组件(事件源)。

事件监听可以设置五种形式(匿名内部类、内部类形式、 Activity 类自身、在layout中定义点击button时的响应事件)

 

匿名内部类作为监听器

使用匿名内部类创建事件监听器对象,即将事件监听器类定义成当前类的匿名内部类。

  • 优点:事件处理器都没有什么复用价值(可复用代码通常都被抽象成了业务逻辑方法),因此大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适。实际上,这种形式也是目前使用最广泛的事件监听器形式。注意:是匿名内部类中访问局部成员变量时,该成员变量必须是 final 修饰的,而对于成员变量则没有这个要求。
  • 适用范围:匿名内部类形式适用于监听器只是临时使用一次。
//在 MainActivity.java 中初始化当前所需要的控件,并为对象赋值    
private Button loginButton;    
loginButton=(Button) findViewById(R.id.button1);
//为按钮注册事件,同时设置监听器
loginButton.setOnClickListener(new OnClickListener(){
    public void onClick(View v){
        System.out.println("匿名内部类作为事件监听器类");
    }
})

内部类作为监听器

将事件监听器类定义为当前类的内部类

  • 优点:一是使用内部类可以在当前类中复用该监听器类,即多个事件源可以注册同一个监听器; 二是使用内部类可以自由访问外部类的所有界面控件,内部类实质上是外部类的成员。
  • 适用范围:内部类形式比较适合于多个事件源同时注册同一事件监听器的情形。

代码举例,以内部类建立点击按钮 Button 的监听器

//在 MainActivity.java 中初始化当前所需要的控件,并为对象赋值
private Button loginButton;
loginButton=(Button)findViewById(R.id.button1);
//为按钮注册事件
loginButton.setOnClickListener(new LoginOnClickListener());
//设置事件监听器
private class LoginOnClickListener implements OnClickListener{
    public void onClick(View v){
        System.out.println("内部类作为事件监听器类");
    }
}

Activity 类自身作为事件监听器类

让 Activity 类本身实现监听器接口,并实现事件处理方法

  • 优点:Activity 类本身作为事件监听器,就如同生活中,我们自己刚好能够处理某一件事,不需要委托给他人处理,可以直接在 Activity 类中定义事件处理器方法,这种形式非常简洁。
  • 缺点:可能造成程序结构混乱,Activity 的主要职责应该是完成界面初始化工作,但此时还需包含事件处理器方法,从而引起混乱;如果 Activity 界面类需要实现监听器接口,给人感觉比较怪异。

代码举例,以内部类建立点击按钮 Button 的监听器

public class Button extends Activity implements OnClickListener{
    protected void onCreat(Bundle SavedInstanceState){
        super.onCreate(SavedInstanceState);
        setContenView(R.layout.activity_main);
        loginButton=(Button) findViewById(R.id.button1);
        loginButton.setOnClickListener(this);
    }
    public void onClick(View v){
    system.out.println("Activity本身作为事件监听器")
    }
}

在layout  XML文件中定义button点击时所调用的方法 

 <Button
        Android:id="@+id/bt_dail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="dailPhone"
        android:text="拨打此号码" />

 

public void dailPhone(View view){  
    callPhone();  
}  

 

  

posted on 2017-08-28 17:00  buder  阅读(272)  评论(0编辑  收藏  举报

导航