
一、引言
在经过几天的学习之后, 首先熟悉了几大基本布局以及一些常用控件的使用方法,目前正在学习如何实现一个基本的登录注册界面及其功能,而实现功能就需要我们采用事件处理机制来进行调用事件处理方法。以下,就是我总结的一些事件处理机制。
二、常用监听接口
VIEw.OnClickListener 单击事件监听器必须实现的接口@H_301_10@VIEw.OnCreateContextMenuListener 创建上下文菜单事件@H_301_10@VIEw.OnFocuschangelistener 焦点改变事件@H_301_10@VIEw.OnKeyListener 按键事件监听器@H_301_10@VIEw.OnLongClickListener 长按事件监听器@H_301_10@VIEw.OntouchListener 触摸屏事件监听器@H_301_10@
三、基于监听的事件处理机制
(一)首先,事件监听机制中由事件源,事件,事件监听器三类对象组成。
事件监听器处理流程:
为事件源(例如:button)设置一个监听器,用于监听用户的 *** 作(点击 *** 作等)@H_301_10@用户做出的 *** 作触发事件源的监听器@H_301_10@自动生成对应的事件对象@H_301_10@将事件源对象作为参数传给事件监听器@H_301_10@事件监听器对事件对象进行判断,执行对应的事件处理器(处理方法)@H_301_10@
(二)五种不同使用方式:
以给按钮添加点击生成Toast信息事件为例
1.用匿名内部类
该方法是最为常用的方法,但是复用性不高
1 button bt1=(button)findVIEwByID(R.ID.bt1); 2 3 bt1.setonclickListener(new VIEw.OnClickListener(){ 4 5 //重写点击事件的处理方法onClick() 6 7 @OverrIDe 8 9 public voID onClick(VIEw v){10 11 //显示Toast信息12 13 Toast.makeText(getApplicationContext(),”点击按钮”,Toast.LENGTH_SHORT).show();14 15 }16 17 }
2.使用内部类
和上面的匿名内部类不同,其优点是在该类中可以进行复用,可直接访问外部类的所有界面组件。
1 public class MainActivity extends Activity { 2 3 private button bt1; 4 5 @OverrIDe 6 7 protected voID onCreate(Bundle savedInstanceState) { 8 9 Super.onCreate(saveInstanceState);10 11 SetContentVIEw(R.layout.activity);12 13 Bt1 = (button) findVIEwByID(R.ID.bt1);14 15 //直接new一个内部类对象作为参数16 17 Bt1.setonClickListener(new BtnClickListener());18 19 }20 21 //定义一个内部类,实现VIEw.OnClickListener接口,并重写onClick()方法22 23 Class BtnClickListener implements VIEw.OnClickListener24 25 {26 27 @OverrIDe28 29 Public voID onClick (VIEw v){30 31 Toast.makeText(getApplicationContext(),”点击按钮”, Toast.LENGTH_SHORT).show();32 33 }34 35 }36 37 }
3.使用外部类
另外创建一个处理时间的Java文件,这种形式用的比较少,因为外部类不能直接访问用户界面类中的组件,要通过构造方法将组件传入使用,这昂导致的结果就是代码不够简洁。
创建一个外部类:
1 public class Myclick implements VIEw.OnClickListener{ 2 private TextVIEw textVIEw; 3 //把文本框作为参数传入 4 public Myclick(TextVIEw v){ 5 textVIEw = v; 6 } 7 @OverrIDe 8 public voID onClick(VIEw v){ 9 //点击按钮后重设文本框的文字10 textVIEw.setText("已点击按钮");11 }12 }MainActivity.java:
1 public class MainActivity extends Activity{ 2 private button btn1; 3 private TextVIEw tv1; 4 @OverrIDe 5 protected voID onCreate(Bundle savadInstanceState){ 6 super.onCreate(savadInstanceState); 7 setContentVIEw(R.layout.activty_main); 8 btn1 = (button) findVIEwByID(R.ID.btn1); 9 tv1 = (TextVIEw) findVIEwByID(R.ID.tv1);10 //new一个外部类,并把TEXTVIEW作为参数传入11 btn1.setonClickListener(new Myclick(tv1));12 }13 }
4.直接使用Activity作为事件监听器
让Actiity类实现XxxListener事件监听接口,在Activity中定义重写对应的时间处理器方法。
eg:Activity类实现了OnClickListener接口,重写了OnClick(VIEw v)方法在为某些组件添加事件监听对象时,直接setXxx.Listener(this)即可
1 import androID.app.Activity; 2 import androID.os.Bundle; 3 import androID.vIEw.VIEw; 4 import androID.Widget.button; 5 import androID.Widget.Toast; 6 7 public class MainActivity extends Activity implements VIEw.OnClickListener{ 8 private button btn; 9 @OverrIDe10 protected voID onCreate(Bundle savedInstanceState){11 super.onCreate(savedInstanceState);12 setContentVIEw(R.layou.activity_main);13 14 btn = (button) findVIEwByID(R.ID.btn);15 btn.setonClickListener(this);16 17 }18 19 //重写接口中的抽象方法20 @OverrIDe21 public voID onClck(VIEw v){22 Toast.makeText(getApplicationContext(),"点击了按钮",Toast.LENGTH_SHORT).show();23 }24 }
5.直接绑定标签
在xml布局文件中对应的Activity中定义一个事件处理方法
eg:public voID myClick(VIEw source)
source对应事件源(组件)接着布局文件中对应要触发事件的组件,设置一个属性: onclick="myclick"即可
MainActivity.java
1 public class MainActivity extends Activity{ 2 private button btn; 3 @OverrIDe 4 protected voID onCreate(Bundle savedInstanceState){ 5 super.onCreate(savedInstanceState); 6 setContentVIEw(R.layou.activity_main); 7 8 9 10 }11 12 //自定义一个方法,传入一个vIEw组件作为参数13 public voID myclick(VIEw source){14 Toast.makeText(getApplicationContext(),"点击按钮",Toast.LENGTH_SHORT).show();15 }16 17 }
main.xml布局文件:
1 <?xml version="1.0" enCoding="utf-8"?> 2 <linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" 3 androID:orIEntation="vertical" androID:layout_wIDth="match_parent" 4 androID:layout_height="match_parent"> 5 6 <button 7 androID:layout_wIDth="wrap_content" 8 androID:layout_height="wrap_content" 9 androID:text="按钮"10 androID:onClick="myclick"/>11 12 </linearLayout>
四、总结
在我们使用中,会根据不同的情况,而选择不同的方法去对事件进行处理。
方法1(匿名),一般用于给特定组件的特定业务响应
方法2和方法3(内部类与外部类),可以同时为多个UI共同的事件处理,适用于对个UI组件复用,但当事件源要传递信息给事件监听器时则不太灵活,必须通过成员变量及构造方法
方法4(activity本身作为监听器),是我们日常业务中应用最多的一种方法。
方法5(xml标签),通过设置UI组件的androID:onClick属性,然后通过代码实现方法,这种方式因为业务逻辑和UI耦合性太高,实际业务中一般不用
总结
以上是内存溢出为你收集整理的Android_基于监听的事件处理机制全部内容,希望文章能够帮你解决Android_基于监听的事件处理机制所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)