首页 理论教育 Android游戏开发:实现事件监听器的方法

Android游戏开发:实现事件监听器的方法

时间:2023-10-22 理论教育 版权反馈
【摘要】:在Android系统中,通过编程方式实现事件监听器的方法有如下4种。在接下来的内容中,将详细讲解上述实现事件监听器的方法。通过上述代码,将事件监听器类定义成当前类的内部类。文件SendSmsListener.java定义了实现事件监听器的外部类SendSmsListener,具体实现代码如下。其实这种形式也是目前最广泛的事件监听器形式。例如在下面的实例中,演示了使用匿名内部类创建事件监听器对象的基本过程。

Android游戏开发:实现事件监听器的方法

在Android系统中,通过编程方式实现事件监听器的方法有如下4种。

■ 内部类形式:将事件监听器类定义在当前类的内部。

■ 外部类形式:将事件监听器类定义成一个外部类。

■ Activity本身作为事件监听器类:让Activity本身实现监听器接口,并实现事件处理方法。

■ 匿名内部类形式:使用匿名内部类创建事件监听器对象。

在接下来的内容中,将详细讲解上述实现事件监听器的方法。

1.内部类形式

在本章前面的实例8-1中,就是通过内部类形式实现事件监听器的。再看如下的代码。

978-7-111-54543-9-Part02-396.jpg

978-7-111-54543-9-Part02-397.jpg

通过上述代码,将事件监听器类定义成当前类的内部类。通过使用内部类,可以在当前类中复用监听器类。另外,因为监听器类是外部类的内部类,所以可以自由访问外部类的所有界面组件。这也是内部类的两个优势。

2.外部类形式

使用外部顶级类定义事件监听器的形式比较少见,主要是因为如下两个原因。

■ 事件监听器通常属于特定的GUI界面,定义成外部类不利于提高程序的内聚性。

■ 外部类形式的事件监听器不能自由访问创建GUI界面的类中的组件,编程不够简洁。

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

例如在下面的实例中,演示了基于监听的事件处理的基本过程。

978-7-111-54543-9-Part02-398.jpg

在本实例中定义了一个继承类OnLongClickListener的外部类SendSmsListener,这个外部类实现了具有短信发送功能的事件监听器。本实例的具体实现流程如下。

(1)编写布局文件main.xml,功能是在屏幕中实现输入短信的文本框控件和发送按钮控件,具体实现代码如下。

978-7-111-54543-9-Part02-399.jpg

978-7-111-54543-9-Part02-400.jpg

(2)文件SendSmsListener.java定义了实现事件监听器的外部类SendSmsListener,具体实现代码如下。

978-7-111-54543-9-Part02-401.jpg

在上述代码中实现的事件监听器没有与任问GUI界面相耦合,在创建该监听器对象时需要传入两个EditText对象和一个Activity对象,其中一个EditText当做收短信者的号码,另外一个EditText作为短信的内容。

(3)文件SendSms.java的功能是监听用户单击按钮动作,当用户单击了界面中的bn按钮时,程序将会触发SendSmsListener监听器,通过该监听器中包含的事件处理方法向指定手机

号码发送短信。文件SendSms.java的具体实现代码如下

978-7-111-54543-9-Part02-402.jpg

本实例执行后的效果如图8-4所示

978-7-111-54543-9-Part02-403.jpg

图8-4 执行效果

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

在Android系统中,当使用Activity本身作为监听器类时,可以直接在Activity类中定义事件处理器方法,这种形式非常简洁。但是有如下两个缺点。

■ 因为Activity的主要职责应该是完成界面初始化,但此

时还需包含事件处理器方法,所以可能会引起混乱。

■ 如果Activity界面类需要实现监听器接口,会和“表现和实现相分离”的原则相悖

例如在下面的实例中,演示了将Activity本身作为事件监听器类的基本过程。

978-7-111-54543-9-Part02-404.jpg

本实例的具体实现流程如下。(www.xing528.com)

1)编写布局文件main.xml,功能是在屏幕中插入一个按钮控件,具体实现代码如下

978-7-111-54543-9-Part02-405.jpg

978-7-111-54543-9-Part02-406.jpg

(2)编写Java程序文件ActivityListener.java,设置让Activity类实现了OnClickListener事件监听接口,这样可以在该Activity类中直接定义事件处理器方法onClick(view v)。当为某个组件添加该事件监听器对象时,可以直接使用this作为事件监听器对象。文件Activity Listener.java的具体实现代码如下。

978-7-111-54543-9-Part02-407.jpg

单击按钮后的执行效果如图8-5所示

978-7-111-54543-9-Part02-408.jpg

图8-5 执行效果

4.使用匿名内部类创建事件监听器对象

在Android应用程序中,因为可被复用的代码通常都被抽象成了业务逻辑方法,所以通常事件处理器都没有什么利用价值,因此大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适。其实这种形式也是目前最广泛的事件监听器形式。

对于使用匿名内部类作为监听器的形式来说,唯一的缺点就是匿名内部类的语法不易掌握,如果读者Java基础扎实,匿名内部类的语法掌握较好,则建议使用匿名内部类作为监听器。

例如在下面的实例中,演示了使用匿名内部类创建事件监听器对象的基本过程。

978-7-111-54543-9-Part02-409.jpg

本实例的具体实现流程如下。

1)编写布局文件main.xml,功能是在屏幕中插入一个按钮控件,具体实现代码如下

978-7-111-54543-9-Part02-410.jpg

(2)编写Java程序文件AnonymousListener.java,功能是使用匿名内部类创建事件监听器对象,具体实现代码如下。

978-7-111-54543-9-Part02-411.jpg

978-7-111-54543-9-Part02-412.jpg

单击按钮后的执行效果如图8-6所示

978-7-111-54543-9-Part02-413.jpg

图8-6 执行效果

5.直接绑定到标签

其实在Android系统中还有一种更简单的绑定事件监听器的的方式:直接在界面布局文件中为指定标签绑定事件处理方法。Android系统中的很多标签都支持诸如onClick、onLongClick等属性,这种属性的属性值是一个形如“xxx(View source)”格式的方法的方法名。

例如在下面的实例中,演示了使用匿名内部类创建事件监听器对象的基本过程

978-7-111-54543-9-Part02-414.jpg

本实例的具体实现流程如下。

1)编写布局文件main.xml,为Button按钮控件添加一个属性,具体实现代码如下

978-7-111-54543-9-Part02-415.jpg

978-7-111-54543-9-Part02-416.jpg

在上述实现代码中,为Button按钮绑定一个名为“clickHanlder”的事件处理方法,这说明开发者需要在该界面布局对应的Activity中定义如下所示的方法,该方法将会负责处理该按钮上的单击事件。

978-7-111-54543-9-Part02-417.jpg

(2)编写Java程序文件BindingTag.java,功能是定义具体的绑定事件处理方法click Handler的功能,具体实现代码如下。

978-7-111-54543-9-Part02-418.jpg

单击按钮后的执行效果如图8-7所示

978-7-111-54543-9-Part02-419.jpg

图8-7 执行效果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈