Android_基于监听的事件处理机制

Android_基于监听的事件处理机制,第1张

概述一、引言    在经过几天的学习之后,首先熟悉了几大基本布局以及一些常用控件的使用方法,目前正在学习如何实现一个基本的登录注册界面及其功能,而实现功能就需要我们采用事件处理机制来进行调用事件处理方法。以下,就是我总结的一些事件处理机制。 二、常用监听接口View

一、引言

       在经过几天的学习之后, 首先熟悉了几大基本布局以及一些常用控件的使用方法,目前正在学习如何实现一个基本的登录注册界面及其功能,而实现功能就需要我们采用事件处理机制来进行调用事件处理方法。以下,就是我总结的一些事件处理机制。

 

二、常用监听接口

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_基于监听的事件处理机制所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1095767.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存