android事件监听回调机制

来源:互联网 发布:淘宝卖家被冻结 编辑:程序博客网 时间:2024/05/21 17:35

        Android事件侦听器是视图View类的接口,包含一个单独的回调方法。这些方法将在视图中注册的侦听器被用户界面操作触发时由Android框架调用。回调方法被包含在Android事件侦听器接口中:

   例如,Android 的view 对象都含有一个命名为 OnClickListener 接口成员变量,用户的点击操作都会交给 OnClickListener的 OnClick() 方法进行处理。

开发者若需要对点击事件做处理,可以定义一个 OnClickListener 接口对象,赋给需要被点击的 view的接口成员变量OnClickListener,一般是用 view 的setOnClickListener() 函数来完成这一操作。当有用户点击事件时,系统就会回调被点击view的OnClickListener接口成员的OnClick()方法。

实例(对于Android界面上Button点击事件监听的模拟):

[java] view plaincopyprint?
  1. 1.定义接口  
  2. public interface OnClickListener {  
  3.      
  4.     public void OnClick(Button b);  
  5.    
  6. }  
  7. 2. 定义Button  
  8. public class Button {  
  9.   OnClickListener listener;  
  10.    
  11.   public void click() {  
  12.     listener.OnClick(this);  
  13.   }  
  14.   public void setOnClickListener(OnClickListener listener) {  
  15.     this.listener = listener;  
  16.   }  
  17. }  
  18. 3. 将接口对象OnClickListener 赋给 Button的接口成员  
  19. public class Activity {  
  20.   public Activity() {  
  21.   }  
  22.   public static void main(String[] args) {  
  23.     Button button = new Button();  
  24.     button.setOnClickListener(new OnClickListener(){  
  25.        @Override  
  26.        public void OnClick(Button b) {  
  27.                  System.out.println("clicked");  
  28.        }     
  29.     });  
  30.     button.click(); //user click,System call button.click();  
  31.   }  
  32. }  
下面是一些常用的Android事件监听器接口中常用的回调方法

onClick()

  包含于View.OnClickListener。当用户触摸这个item(在触摸模式下),或者通过浏览键或跟踪球聚焦在这个item上,然后按下“确认”键或者按下跟踪球时被调用。

onLongClick()

  包含于View.OnLongClickListener。当用户触摸并控制住这个item(在触摸模式下),或者通过浏览键或跟踪球聚焦在这个item上,然后保持按下“确认”键或者按下跟踪球(一秒钟)时被调用。

onFocusChange()

  包含于View.OnFocusChangeListener。当用户使用浏览键或跟踪球浏览进入或离开这个item时被调用。

onKey()

  包含于View.OnKeyListener。当用户聚焦在这个item上并按下或释放设备上的一个按键时被调用。

onTouch()

  包含于View.OnTouchListener。当用户执行的动作被当做一个触摸事件时被调用,包括按下,释放,或者屏幕上任何的移动手势(在这个item的边界内)。

onCreateContextMenu()

  包含于View.OnCreateContextMenuListener。当正在创建一个上下文菜单的时候被调用(作为持续的“长点击”动作的结果)。参阅创建菜单Creating Menus章节以获取更多信息。

注意:

这些回调函数中onClick()回调没有返回值,但是一些其它回调方法必须返回一个布尔值。

onLongClick() 

  返回true 表示你已经处理了这个事件而且到此为止;返回false 表示你还没有处理它和/或这个事件应该继续交给其他on-click侦听器。

onKey()

  返回true 表示你已经处理了这个事件而且到此为止;返回false 表示你还没有处理它和/或这个事件应该继续交给其他on-key侦听器。

onTouch()

  返回一个布尔值来指示你的侦听器是否已经消费了这个事件。重要的是这个事件可以有多个彼此跟随的动作。因此,如果当接收到向下动作事件时你返回false,那表明你还没有消费这个事件而且对后续动作也不感兴趣。那么,你将不会被该事件中的其他动作调用,比如手势或最后出现向上动作事件。

  按键事件总是递交给当前焦点所在的视图。它们从视图层次的顶层开始被分发,然后依次向下,直到到达恰当的目标。如果你的视图(或者一个子视图)当前拥有焦点,那么你可以看到事件经由dispatchKeyEvent()方法分发。除了从你的视图截获按键事件,还有一个可选方案,你还可以在你的活动中使用onKeyDown() and onKeyUp()来接收所有的事件。

0 0
原创粉丝点击