前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android开发学习——事件监听方式

Android开发学习——事件监听方式

作者头像
Max超
发布2019-01-21 14:48:03
5940
发布2019-01-21 14:48:03
举报

五大监听方式:匿名内部类 内部类 外部类 接口类 绑定标签

匿名内部类

代码语言:javascript
复制
bt1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                Intent intent = new Intent(SecondActivity.this,MainActivity.class);
                startActivity(intent);
            }
        });

大部分时候,事件处理器都没有什么利用价值(可利用代码通常都被抽象成了业务逻辑方法),因此大部分事件器更合适,实际上,这种形式是目前是最广泛的事件监听器形式。上面的程序代码就是匿名内部类来创建事件监对于使用匿名内部类作为监听器的形式来说,唯一的缺点就是匿名内部类的语法有点不易掌握 内部类

代码语言:javascript
复制
public class SecondActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_activity);
        Button bt1;
        bt1 = (Button) findViewById(R.id.button1);
        bt1.setOnClickListener(new Myclick());  
    }
    //内部类
    class Myclick implements View.OnClickListener{
    @Override
    public void onClick(View arg0) {
    Intent intent = new Intent(SecondActivity.this,MainActivity.class);
    startActivity(intent);
        }
    }
}

将事件监听器类定义成当前类的内部类。1、使用内部类可以在当前类中复用监听器类,因为监听器类是外部类内部类的两个优势。上面代码就是内部类的形式!

外部类

代码语言:javascript
复制
//activity类中
bt2.setOnClickListener(new Iclick());


//Iclick类中
import android.util.Log;
import android.view.View;

public class Iclick implements View.OnClickListener{
    private static final String TAG = "YES";
    @Override
    public void onClick(View arg0) {
        Log.i(TAG,"调用外部类");
    }
}

使用外部类定义事件监听器类的形式比较少见,主要因为如下两个原因: 1、事件监听器通常属于特定的gui界面,定义成外部类不篮球提高程序的内聚性。 2、外部类形式的事件监听器不能自由访问创建gui界面的类中的组件,编程不够简洁。 但如果某个事件监听器确实需要被多个gui界面所共享,而且主要是完成某种业务逻辑的实现,则可以考虑使用

接口类

代码语言:javascript
复制
public class ThreeActivity extends Activity implements View.OnClickListener {

    Button bt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.three_activity);
        bt = (Button) findViewById(R.id.button1);
        bt.setOnClickListener(this);
    }
    @Override
    public void onClick(View arg0) {
        Intent it = new Intent();
        it.setAction("android.intent.action.MAIN");
        startActivity(it);
    }

}

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

其中优点为:非常简洁

缺点为:

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

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

绑定标签

代码语言:javascript
复制
//在xMl文件中
<Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_below="@+id/button1"
        android:layout_marginTop="39dp"
        android:text="Button"
        android:onClick="clickhandle" />

//在活动活动中添加一个clickhandle函数
private  static final string TAG = "begin"
public void clickhandle(View source){
    Log.i(TAG,"调用标签进行监听事件")
}

为Button按钮绑定一个事件处理方法:clickHanlder,这意味着开发者需要在该界面布局对应的Activity中定处理该按钮上的单击事件

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年05月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档