您的位置:首页 > 移动开发 > Android开发

Android事件处理

2015-06-07 23:51 387 查看
基于监听的事件处理

我们知道在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讲义 中关于此内容的代码,大家可以查看我的资源下载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息