Android的事件处理之基于监听的事件处理

当用户在程序界面上执行各种操作时,应用程序必须为用户动作提供相应动作,这种响应动作就需要通过事件处理来完成
Android提供了两种事件处理机制:

  • 基于监听的事件处理
  • 基于回调的事件处理

这篇博客讲为大家详细讲解第一种基于监听的事件处理


在事件监听的处理模型中,主要涉及如下三类对象:

  • 事件源:事件发生的各个场所,通常就是指各个组件,如按钮,编辑框,文本框等
  • 事件:事件封装了界面组件上发生的特定事件
  • 事件监听器:负责监听事件源发生的事件,并对各种事件作出相应

在程序中实现事件监听器,通常有如下几种方式:

  • 内部类形式:将事件监听器类定义成当前类的内部类
  • 外部类形式:将事件监听类定义成一个外部类
  • Activity本身作为事件监听器类:让Activity本身实现监听接口,并实现事件处理方法
  • 匿名内部类:使用匿名内部类创建事件监听对象

    1.内部类作为事件监听类

    程序定义了一个View.OnClickListener实现类,这个实现类将会作为事件监听器使用
    内部类

使用内部类可以在当前类中复用该监听类,并且可以自由访问外部类中的所有界面组件,这是使用内部类的两个优势

2.外部类作为事件监听类

使用外部类定义事件监听类的形式比较少见,主要由于

  • 事件监听器通常属于特定的GUI界面,定义成外部类不利于提高程序的内聚性
  • 外部类形式的事件监听器不能自由访问创建GUI界面的类中的组件,编程不够简洁

    这里写图片描述

这里写图片描述
当用户长按单击界面中的bn按钮时,程序将会触发SimListener监听器,该监听器里包含的事件处理方法将会运用Toast显示提示信息框

3.Activity本身作为事件监听类

这里写图片描述

上面代码让Activity类实现了OnclickListener事件监听接口,从而可以在该Activity类中直接定义事件处理器方法:onClick(View v),当为某组件添加该事件监听器时,直接使用this作为事件监听器对象即可

4.匿名内部类作为事件监听器

这种形式是目前使用最广泛的事件监听器形式
这里写图片描述

5.直接绑定到标签

Android还提供一种更加简单的绑定事件监听器的方式,那就是直接在界面布局文件中文为制定标签绑定事件处理方法

这里写图片描述
上面代码为Button按钮绑定了一个事件处理方法click

这里写图片描述

上面代码定义了对应的click(View source)方法,当程序中的bn按钮被单击时,该方法会被激发

总的来说:

内部类:使用内部类作为事件监听器,可以在当前类中重复使用,另外,由于监听器是外部类的内部类,所以可以自由访问外部类的所有界面组件

外部类,外部类作为事件监听器的情况比较少见,但是如果某个事件监听器确实需要被多个GUI界面所共享,而且主要是用来完成某种业务逻辑的实现,则可以考虑是用外部类的形式来定义事件监听器类。

Activity作为事件监听器:这种做法虽然形式简单,但是有两个缺点
1.造成程序的混乱,Activity的主要作用是完成初始化界面的工作,但是此时居然还要包含时间处理方法,可能会引起混乱
2.Activity实现监听器接口,那么他给开发者的感觉会比较奇怪
绑定到组件事件属性:这种在界面中绑定组件的方式比较直观

因此,最常使用的是最后两种 —— 匿名内部类作为事件监听器类直接绑定到标签,用户可以根据自己的编码需求选择不同的方式实现事件监听

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值