Android事件处理

来源:互联网 发布:淘宝有客服投诉电话 编辑:程序博客网 时间:2024/04/27 06:14

基于监听的事件处理
我们知道在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.javabutton.setOnClickListener(new MyClickListener(textView));MyClickListener.javapublic 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讲义 中关于此内容的代码,大家可以查看我的资源下载。

0 0