基于监听借口机制的事件处理
面向对象的事件处理
处理流程:
- 为某个事件源(界面组件)设置一个监听器,用户监听用户操作;
- 当用户操作时,会触发事件源的监听器;
- 生成对应的事件对象;
- 将生成的事件对象作为参数传递给事件监听器;
- 事件监听器对事件对象进行判断,执行对应的事件处理器。
常用接口 单击事件监听器View.OnClickListener
某一个Activity中的任意控件在触控模式下,有两种方式;
- 添加在 *.xml 中的对应控件块 android: onClick="methodName";
- 添加在 Activity 页面,*.setOnClickListener(this) 并且点击事件写在onClick(View view) 函数体
Problem
若使用第一种方式为空间加事件监听机制,通常会碰到以下问题: error:java.lang.IllegalStateException: Could not execute method for android:onClick
Solution
面向Problem,检验解决流程大致如下,按顺序检验并修正,最多进行到第四步即可解决,可扩展~
- 初始化组件
- 线程问题
- 抛出异常问题
- 添加 Tag 避免冲突
初始化组件
Android 应用界面的组件一般通过 xml 文件设计,在直接拖拽的基础上修改属性值得到预期的组件样式和位置,如果需要对部分组件进一步操作,需在 Activity Class 中进行声明,格式如下:
E.g:Button button = (Button) this.findViewById(R.id.button);
- 检验被监听的组件是否进行了声明,在界面对应的 Activity Class 中 onCreate(Bundle savedInstanceState) 函数下进行相应的声明;
线程问题
默认情况下主线程是不会等待子线程的,所以当点击事件挂在主线程去做,如果点击事件未能顺利运行,会影响到主线程,所以导致了线程问题。
- 检验点击事件相对应的实现程序是否正常,保证子线程可以顺利完成;
- 如果检验完成仍出现此问题:
- 可以开通一个新的线程,将点击时间挂在这个新的线程上;
- 在主线程中采取 sleep 的措施。
抛出异常问题
在做 I/O 、Request 等操作时,为保证应用整体的完整性和程序的完整运行,通过会用异常处理代替程序终结。
- 检验点击事件的实现程序中是否出现了相关的操作;
- 是否为相关操作加相应的异常处理:
- try / catch
- throws Exception
添加 Tag 避免冲突
Tag 通常作为标签表征不同的组件
- 如果前三个流程都进行完成仍然出现此问题,大致是因为多个组件点击事件产生了冲突
- 在 xml 文件中需要添加点击事件的组件块中加入属性:
android:tag = "1"