欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

2020-09-29

程序员文章站 2022-04-21 19:20:52
摸鱼学Android 二十三(事件处理机制)1 基于监听的事件处理机制1.1 说明1.2 使用1.2.1 直接用匿名内部类1.2.2 使用内部类1.2.3 使用外部类1.2.4 直接使用Activity作为事件监听器1.2.5 直接绑定到标签2 基于回调的事件处理机制2.1 说明2.2 常见View的回调方法2.3 事件传播顺序1 基于监听的事件处理机制1.1 说明事件监听机制中由事件源,事件,事件监听器三类对象组成,处理流程如下:为某个事件源(组件)设置一个监听器,用于监听用户操作用户的操作,...

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

1.1 说明

事件监听机制中由事件源,事件,事件监听器三类对象组成,处理流程如下:

  1. 为某个事件源(组件)设置一个监听器,用于监听用户操作
  2. 用户的操作,触发了事件源的监听器
  3. 生成了对应的事件对象
  4. 将这个事件源对象作为参数传给事件监听器
  5. 事件监听器对事件对象进行判断,执行对应的事件处理器(对应事件的处理方法)

1.2 使用

1.2.1 直接用匿名内部类

setListener后重写onClick方法,复用性不高

button.setOnClickListener(new OnClickListener() {    
            //重写点击事件的处理方法onClick()    
            @Override    
            public void onClick(View v) {    
                //显示Toast信息    
                //... 
            }    
        });   

1.2.2 使用内部类

定义一个内部类实现监听接口,可复用,可访问外部类的所有界面组件

protected void onCreate(Bundle savedInstanceState) {    
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.activity_main);    
        button= (Button) findViewById(R.id.btnshow);    
        //直接new一个内部类对象作为参数    
        button.setOnClickListener(new BtnClickListener());    
    }     
    //定义一个内部类,实现View.OnClickListener接口,并重写onClick()方法    
    class BtnClickListener implements View.OnClickListener    
    {    
        @Override    
        public void onClick(View v) {    
            //...
        }    
    }    

1.2.3 使用外部类

使用较少,外部类不能直接访问用户界面的组件

public class MyClick implements OnClickListener {    
    public MyClick(TextView txt)    
    {    
    }    
    @Override    
    public void onClick(View v) {    
        //...
    }    
}

1.2.4 直接使用Activity作为事件监听器

Activity实现监听接口

public class MainActivity extends Activity implements OnClickListener{    
    private Button button;    
    @Override    
    protected void onCreate(Bundle savedInstanceState) {    
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.activity_main);    
            
        button= (Button) findViewById(R.id.btnshow);    
        //直接写个this    
        button.setOnClickListener(this);    
    }    
    //重写接口中的抽象方法    
    @Override    
    public void onClick(View v) {    
        //... 
    }         
}   

1.2.5 直接绑定到标签

组件设置onclick属性,在Activity中定义方法myclick(View view)

<Button     
        android:layout_width="wrap_content"    
        android:layout_height="wrap_content"    
        android:text="按钮"    
        android:onClick="myclick"/>  

2 基于回调的事件处理机制

2.1 说明

重写组件的回调方法后,在点击事件发生时,组件会处理对应的事件,即事件由事件源自身处理。

2.2 常见View的回调方法

  • 在该组件上触发屏幕事件: boolean onTouchEvent(MotionEvent event);
  • 在该组件上按下某个按钮时: boolean onKeyDown(int keyCode,KeyEvent event);
  • 松开组件上的某个按钮时: boolean onKeyUp(int keyCode,KeyEvent event);
  • 长按组件某个按钮时: boolean onKeyLongPress(int keyCode,KeyEvent event);
  • 键盘快捷键事件发生: boolean onKeyShortcut(int keyCode,KeyEvent event);
  • 在组件上触发轨迹球屏事件: boolean onTrackballEvent(MotionEvent event);
  • 当组件的焦点发生改变: protected void onFocusChanged(boolean gainFocus, int direction, Rect previously FocusedRect)(和前面的6个不同,这个方法只能够在View中重写)

2.3 事件传播顺序

监听器优先,然后到View组件自身,再到Activity,返回false时继续传播,true则终止传播。

本文地址:https://blog.csdn.net/qq_23470315/article/details/108863878

相关标签: android