Android 的事件处理机制

本文详细介绍了Android的事件处理机制,包括基于监听和基于回调的方式。基于监听的事件处理涉及事件源、事件和事件监听器,常见监听器接口如OnClickListener等。基于回调的事件处理通过自定义View并重写处理方法实现。此外,还讲解了如何响应系统设置的事件以及Handler消息处理机制,用于解决多线程操作UI组件的安全问题。最后,简单介绍了异步任务AsyncTask的使用,强调了不要在UI线程中执行耗时操作的重要性。
摘要由CSDN通过智能技术生成

Android 提供了两种方式的事件处理机制:<1> 基于监听的事件处理; <2> 基于回调的事件处理。
(说明:事件处理就是为用户动作提供响应的机制)

一、基于监听的事件处理

1、两种方式
(1)为 Android 界面组件绑定特定的事件监听器。(常用该方式)
(2)在界面布局文件中,为 UI 组件的 android:onClick 属性指定事件监听方法。(注:该方式需要在 Activity 中定义该事件监听方法)

2、事件监听处理模型
(1)涉及三类对象:

  • Event Source(事件源):指事件发生的场所(一般就是各个组件,如:按钮、窗口、菜单等);
  • Event(事件):指界面组件上发生的特定事情(一般就是用户的一次具有操作,如:点击、滑动等);
  • Event Listener(事件监听器):负责监听在事件源发生的具体事件,并对各种事件作出相应的响应。(其核心就是它所包含的方法,即:事件处理器(Event Handler))
    在这里插入图片描述

总结:用户具体一个动作就会激发一个相应的事件,该事件就会触发事件源上注册的事件监听器,然后事件监听器会调用对应的事件处理器来做出相应的响应。

(2)基于监听的事件处理机制,是一种委派式事件处理方式:
事件源(组件)将整个事件处理,委托给特定的事件监听器,当该事件源发生指定的事件时,就通知所委托的事件监听器来处理这个事件。
(说明:每个组件均可以针对特定的事件,指定一个事件监听器;每个事件监听器也可以监听一个或多个组件)

(3)实现步骤:

  • 在 Activity 中获取界面组件;(即:通过 findViewById() 方法,获取布局文件中的组件);
  • 定义一个事件监听器类(必须实现一个 XxxListener 接口),其中必须实现某些方法,这些方法作为事件处理器,用来处理具体的事件;
  • 调用事件源的 setXxxListener() 方法(该方法的参数就是上面事件监听器类的一个对象),将事件监听器对象,注册给组件。

注意:对于包含很多信息的复杂事件(如:键盘事件、触屏事件等),Android 会将事件信息封装成 XxxEvent 对象,并把该对象作为参数传入事件处理器方法中。

(4)常见的事件监听器接口:(定义一个事件监听器类,必须要实现一个事件监听器接口)

  • View.OnClickListener:单击事件的事件监听器接口
  • View.OnCreateContextMenuListener:创建上下文菜单事件的事件监听器接口
  • View.OnFocusChangeListener:焦点改变事件的事件监听器接口
  • View.OnKeyListener:按键事件的事件监听器接口
  • View.OnLongClickListener:长按事件的事件监听器接口
  • View.OnTouchListener:触摸事件的事件监听器接口

(5)代码示例:

// 1、直接使用匿名内部类
public class MainActivity extends Activity {
       
    private Button btnshow;    
    @Override    
    protected void onCreate(Bundle savedInstanceState) {
       
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.activity_main);    
        btnshow = (Button) findViewById(R.id.btnshow);  
          
        btnshow.setOnClickListener(new OnClickListener() {
       
            // 重写点击事件的处理方法onClick()    
            @Override    
            public void onClick(View v) {
       
                // 显示Toast信息    
                Toast.makeText(getApplicationContext(), "你点击了按钮", Toast.LENGTH_SHORT).show();    
            }    
        });    
    }        
}

// 2、使用内部类
public class MainActivity extends Activity 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值