Android事件处理

基于监听的事件处理
我们知道在Android中,事件处理模型包括事件、事件源、事件监听器。事件就是用户的操作了,比如说点击、双击……。事件源是这个事件发生在什么地方,比如我们点击一个按钮,那么事件源就是这个按钮。事件监听器就是由哪个类或模块来处理这个事件。
根据事件监听器类在内部还是在外部,抑或是普通内部还是匿名内部,我们把事件监听处理分成了以下5种,其中匿名内部类是我们最常用的。
1.普通内部类作为事件监听器类

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button) findViewById(R.id.button1);
        textView = (TextView) findViewById(R.id.textView1);

        button.setOnClickListener(new MyClickListener());
    }

    class MyClickListener implements View.OnClickListener
    {

        @Override
        public void onClick(View v) {
            textView.setText("按钮被单击了");
        }

    }

2.匿名内部类作为事件监听器类

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button) findViewById(R.id.button1);
        textView = (TextView) findViewById(R.id.textView1);

        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                textView.setText("按钮被单击了");
            }
        });

3.Activity本身作为事件监听器类
由于要在Activity中实现onClick(View V)函数,所以Mainactivity要记得implements OnClickListener

public class MainActivity extends ActionBarActivity implements OnClickListener {

    private Button button = null;
    private TextView textView = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button) findViewById(R.id.button1);
        textView = (TextView) findViewById(R.id.textView1);

        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        textView.setText("按钮被单击了");
    }

4.外部类作为事件监听器类

MainActivity.java
button.setOnClickListener(new MyClickListener(textView));

MyClickListener.java
public class MyClickListener implements OnClickListener {

    private TextView tv;
    public MyClickListener(TextView textView){
        this.tv = textView;
    }
    @Override
    public void onClick(View v) {
        tv.setText("按钮被单击了");
    }

}

5.直接绑定到标签

  <Button
        ......
        android:onClick="click"
        android:text="Button" />
//MainActivity.java额外添加下面一个函数
 public void click(View V){
        textView.setText("按钮被单击了");
    }

我们在应用中用到最多的应该是匿名内部类的形式吧!

基于回调的事件处理

回调机制与监听机制都很好理解,在这里需要注意的是基于回调的事件传播

这里写图片描述
红色代表的是主Acitivity,黄色表示Activity上面的Button,白色表示Button上面绑定的事件。箭头就像用户触摸手机屏幕而产生的事件。

从上图中我们很容易知道,事件传播的路径是 onKeyListener->Button->Activity, 前提是回调函数的返回值都是false

这里我刚上传了李刚 疯狂Android讲义 中关于此内容的代码,大家可以查看我的资源下载。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章