Android事件处理
2015-06-07 23:51
387 查看
基于监听的事件处理
我们知道在Android中,事件处理模型包括事件、事件源、事件监听器。事件就是用户的操作了,比如说点击、双击……。事件源是这个事件发生在什么地方,比如我们点击一个按钮,那么事件源就是这个按钮。事件监听器就是由哪个类或模块来处理这个事件。
根据事件监听器类在内部还是在外部,抑或是普通内部还是匿名内部,我们把事件监听处理分成了以下5种,其中匿名内部类是我们最常用的。
1.普通内部类作为事件监听器类
2.匿名内部类作为事件监听器类
3.Activity本身作为事件监听器类
由于要在Activity中实现onClick(View V)函数,所以Mainactivity要记得implements OnClickListener
4.外部类作为事件监听器类
5.直接绑定到标签
我们在应用中用到最多的应该是匿名内部类的形式吧!
基于回调的事件处理
回调机制与监听机制都很好理解,在这里需要注意的是基于回调的事件传播。
红色代表的是主Acitivity,黄色表示Activity上面的Button,白色表示Button上面绑定的事件。箭头就像用户触摸手机屏幕而产生的事件。
从上图中我们很容易知道,事件传播的路径是 onKeyListener->Button->Activity, 前提是回调函数的返回值都是false
这里我刚上传了李刚 疯狂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讲义 中关于此内容的代码,大家可以查看我的资源下载。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories