大多数情况下,我在对Android的事件处理方式都是用的基于监听的事件处理方式。事件监听的处理模型,主要涉及如下三类对象:

  1. 事件源:事件发生的场所。通常是某个组件,例如按钮、窗口、菜单、item等
  2. 事件:指界面的组件上发生的特定事情(通常就是一次用户操作)。如果程序想要获取界面上组件所发生的事件的相关信息,一般通过事件的对象来获取。
  3. 事件监听器:负责监听事件源所发生的事件,并对各种事件做出的相应响应。

所谓的事件监听器,其实就是实现了特定接口的Java类的实例。在实际应用中,实现事件监听器主要有四种形式:

  1. 内部类作为事件监听器类:将事件监听器类定义成当前类的内部类。优点:①可以在当前类中复用该监听器类;②因为监听器是外部类的内部类,所以可以自由访问外部类的所有界面组件。
public class MainActivity extends Activity{    @Override    public void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        // 获取应用程序中的bn按钮        Button bn = (Button) findViewById(R.id.bn);        // 为按钮绑定事件监听器        bn.setOnClickListener(new MyClickListener());     }    // 定义一个单击事件的监听器(使用内部类作为事件监听器类)    class MyClickListener implements View.OnClickListener    {        // 实现监听器类必须实现的方法,该方法将会作为事件处理器        @Override        public void onClick(View v)        {            //准备intent对象            Intent intent = new Intent(MainActivity.this,NextActivity.class);            //启动下一个界面            startActivity(intent );        }    }}
  1. Activity本身作为事件监听器类:让Activity本身实现监听器接口,并实现事件处理方法。缺点:可能造成程序结构混乱,Activity的主要职责应该是完成界面的初始化工作,但此时还要包含事件处理器方法,从而引起混乱
// 实现事件监听器接口public class MainActivity extends Activity        implements View.OnClickListener{    EditText show;    Button bn;    @Override    public void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        show = (EditText) findViewById(R.id.show);        bn = (Button) findViewById(R.id.bn);        // 直接使用Activity作为事件监听器        bn.setOnClickListener(this);    }    // 实现事件处理方法    @Override    public void onClick(View v)    {        //准备intent对象        Intent intent = new Intent(this,NextActivity.class);        //启动下一个界面        startActivity(intent );    }}
  1. 匿名内部类作为事件监听器类:使用匿名内部类创建事件监听器对象
public class MainActivity extends Activity{    Button bn;    @Override    public void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        bn = (Button) findViewById(R.id.bn);        // 使用匿名内部类的实例作为事件监听器        bn.setOnClickListener(new OnClickListener()        {            // 实现事件处理方法:当点击按钮时,跳转到下一个界面            @Override            public void onClick(View v)            {                //准备intent对象                Intent intent = new Intent(MainActivity.this,NextActivity.class);                //启动下一个界面                startActivity(intent );            }        });    }}
  1. 外部类作为事件监听器类:将事件监听器类定义成一个外部类。比较少见,基本不用。

    通过上面是几个例子可以看出,基于监听的事件处理模型的编程步骤如下:
    ①获取界面组件(事件源),也就是被监听的对象。(findViewById())
    ②实现事件监听器类,该监听器类是一个特殊的Java类,必须实现一个XxxListener接口。
    ③调用事件源的setXxxListener方法将事件监听器对象注册给组件(事件源)。
    当事件源上发生指定事件时,Android会触发事件监听器,由事件监听器调用相应的方法来处理事件。

更多相关文章

  1. Android的简单应用(三)——为你的程序添加监听器
  2. 2019年Android开发者常见面试题(一)
  3. 单击事件与触摸事件的区别
  4. 回调机制在 Android(安卓)监听用户界面操作中的体现
  5. android事件分发(二)
  6. Android(安卓)UI设计之自定义SwitchButton开关,实现类似IOS中UISw
  7. android 内存泄露原因以及排查和解决方案
  8. Android事件分发机制源码畅游解析(Activity篇)
  9. Android(安卓)DragAndDrop API 拖拽效果 交换ListView的Item值

随机推荐

  1. MySQL8.0.26安装与卸载的完整步骤记录
  2. MySQL中的redo log和undo log日志详解
  3. 为什么MySQL选择Repeatable Read作为默认
  4. 使用ORM新增数据在Mysql中的操作步骤
  5. mysql脏页是什么
  6. 为什么MySQL分页用limit会越来越慢
  7. MySQL深度分页(千万级数据量如何快速分页
  8. ORM模型框架操作mysql数据库的方法
  9. mysql 直接拷贝data 目录下文件还原数据
  10. MySQL 四种连接和多表查询详解