在Android系统中,通过编程方式实现事件监听器的方法有如下4种。
■ 内部类形式:将事件监听器类定义在当前类的内部。
■ 外部类形式:将事件监听器类定义成一个外部类。
■ Activity本身作为事件监听器类:让Activity本身实现监听器接口,并实现事件处理方法。
■ 匿名内部类形式:使用匿名内部类创建事件监听器对象。
在接下来的内容中,将详细讲解上述实现事件监听器的方法。
1.内部类形式
在本章前面的实例8-1中,就是通过内部类形式实现事件监听器的。再看如下的代码。
通过上述代码,将事件监听器类定义成当前类的内部类。通过使用内部类,可以在当前类中复用监听器类。另外,因为监听器类是外部类的内部类,所以可以自由访问外部类的所有界面组件。这也是内部类的两个优势。
2.外部类形式
使用外部顶级类定义事件监听器的形式比较少见,主要是因为如下两个原因。
■ 事件监听器通常属于特定的GUI界面,定义成外部类不利于提高程序的内聚性。
■ 外部类形式的事件监听器不能自由访问创建GUI界面的类中的组件,编程不够简洁。
但是如果某个事件监听器确实需要被多个GUI界面所共享,而且主要是完成某种业务逻辑的实现,则可以考虑使用外部类的形式来定义事件监听器类。
例如在下面的实例中,演示了基于监听的事件处理的基本过程。
在本实例中定义了一个继承类OnLongClickListener的外部类SendSmsListener,这个外部类实现了具有短信发送功能的事件监听器。本实例的具体实现流程如下。
(1)编写布局文件main.xml,功能是在屏幕中实现输入短信的文本框控件和发送按钮控件,具体实现代码如下。
(2)文件SendSmsListener.java定义了实现事件监听器的外部类SendSmsListener,具体实现代码如下。
在上述代码中实现的事件监听器没有与任问GUI界面相耦合,在创建该监听器对象时需要传入两个EditText对象和一个Activity对象,其中一个EditText当做收短信者的号码,另外一个EditText作为短信的内容。
(3)文件SendSms.java的功能是监听用户单击按钮动作,当用户单击了界面中的bn按钮时,程序将会触发SendSmsListener监听器,通过该监听器中包含的事件处理方法向指定手机
号码发送短信。文件SendSms.java的具体实现代码如下
本实例执行后的效果如图8-4所示
图8-4 执行效果
3.Activity本身作为事件监听器类
在Android系统中,当使用Activity本身作为监听器类时,可以直接在Activity类中定义事件处理器方法,这种形式非常简洁。但是有如下两个缺点。
■ 因为Activity的主要职责应该是完成界面初始化,但此
时还需包含事件处理器方法,所以可能会引起混乱。
■ 如果Activity界面类需要实现监听器接口,会和“表现和实现相分离”的原则相悖
例如在下面的实例中,演示了将Activity本身作为事件监听器类的基本过程。
本实例的具体实现流程如下。(www.xing528.com)
1)编写布局文件main.xml,功能是在屏幕中插入一个按钮控件,具体实现代码如下
(2)编写Java程序文件ActivityListener.java,设置让Activity类实现了OnClickListener事件监听接口,这样可以在该Activity类中直接定义事件处理器方法onClick(view v)。当为某个组件添加该事件监听器对象时,可以直接使用this作为事件监听器对象。文件Activity Listener.java的具体实现代码如下。
单击按钮后的执行效果如图8-5所示
图8-5 执行效果
4.使用匿名内部类创建事件监听器对象
在Android应用程序中,因为可被复用的代码通常都被抽象成了业务逻辑方法,所以通常事件处理器都没有什么利用价值,因此大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适。其实这种形式也是目前最广泛的事件监听器形式。
对于使用匿名内部类作为监听器的形式来说,唯一的缺点就是匿名内部类的语法不易掌握,如果读者Java基础扎实,匿名内部类的语法掌握较好,则建议使用匿名内部类作为监听器。
例如在下面的实例中,演示了使用匿名内部类创建事件监听器对象的基本过程。
本实例的具体实现流程如下。
1)编写布局文件main.xml,功能是在屏幕中插入一个按钮控件,具体实现代码如下
(2)编写Java程序文件AnonymousListener.java,功能是使用匿名内部类创建事件监听器对象,具体实现代码如下。
单击按钮后的执行效果如图8-6所示
图8-6 执行效果
5.直接绑定到标签
其实在Android系统中还有一种更简单的绑定事件监听器的的方式:直接在界面布局文件中为指定标签绑定事件处理方法。Android系统中的很多标签都支持诸如onClick、onLongClick等属性,这种属性的属性值是一个形如“xxx(View source)”格式的方法的方法名。
例如在下面的实例中,演示了使用匿名内部类创建事件监听器对象的基本过程
本实例的具体实现流程如下。
1)编写布局文件main.xml,为Button按钮控件添加一个属性,具体实现代码如下
在上述实现代码中,为Button按钮绑定一个名为“clickHanlder”的事件处理方法,这说明开发者需要在该界面布局对应的Activity中定义如下所示的方法,该方法将会负责处理该按钮上的单击事件。
(2)编写Java程序文件BindingTag.java,功能是定义具体的绑定事件处理方法click Handler的功能,具体实现代码如下。
单击按钮后的执行效果如图8-7所示
图8-7 执行效果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。