EditText中onEditorAction监听事件执行两次
来源:互联网 发布:什么软件看美剧最全 编辑:程序博客网 时间:2024/06/07 05:28
调试开源项目android_serialport_api时,遇到onEditorAction执行两次的问题
更具参考文档解释:Android的EditText通过setOnEditorActionListener给文本编辑框设置监听事件,但是在其处理方法onEditorAction中的逻辑在每次回车后都触发了两次,原来是在键盘回车的ACTION_UP和ACTION_DOWN时都会触发这个方法,后面添加打印信息的时候和这个说法稍微有点出入,求大神解释
原始代码为
Emission.setOnEditorActionListener(new OnEditorActionListener() {public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {int i;CharSequence t = v.getText();char[] text = new char[t.length()];for (i=0; i<t.length(); i++) {text[i] = t.charAt(i);}try {mOutputStream.write(new String(text).getBytes());mOutputStream.write('\n');} catch (IOException e) {e.printStackTrace();}return false;}});
添加打印信如下
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {if (event == null)Log.d("chenzhen","chenzhen event null");if (event != null && event.getAction() == KeyEvent.ACTION_UP)Log.d("chenzhen","ACTION_UP");if (event != null && event.getAction() == KeyEvent.ACTION_DOWN)Log.d("chenzhen","ACTION_DOWN");if (actionId == EditorInfo.IME_ACTION_SEND)Log.d("chenzhen", "actionID is send");int i;CharSequence t = v.getText();char[] text = new char[t.length()];for (i=0; i<t.length(); i++) {text[i] = t.charAt(i);}Log.d("chenzhen", "chenzhen write");try {mOutputStream.write(new String(text).getBytes());mOutputStream.write('\n');} catch (IOException e) {e.printStackTrace();}return false;}
打印结果为
01-01 03:08:12.585 2736 2736 D chenzhen: chenzhen event null01-01 03:08:12.585 2736 2736 D chenzhen: actionID is send01-01 03:08:12.585 2736 2736 D chenzhen: chenzhen write01-01 03:08:12.625 2736 2736 D chenzhen: ACTION_DOWN01-01 03:08:12.625 2736 2736 D chenzhen: chenzhen write
根据结果可以分析
第一次调用时 event 是空的,第二次调用时event不为空且getAction()为ACTION_DOWN
第一次调用时actionID是IME_ACTION_SEND,第二次调用时不为IME_ACTION_SEND
所以过滤的方法有两种
1 通过actionID进行过滤,因为只有第一次的actionID为IME_ACTION_SEND
Emission.setOnEditorActionListener(new OnEditorActionListener() {public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {if (actionId == EditorInfo.IME_ACTION_SEND ) {int i;CharSequence t = v.getText();char[] text = new char[t.length()];for (i=0; i<t.length(); i++) {text[i] = t.charAt(i);}try {mOutputStream.write(new String(text).getBytes());mOutputStream.write('\n');} catch (IOException e) {e.printStackTrace();}}return false;}});
2 通过event函数是否为空进行过滤,因为第一次event函数为空,所以修改如下
Emission.setOnEditorActionListener(new OnEditorActionListener() {public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {if (event == NULL ) {int i;CharSequence t = v.getText();char[] text = new char[t.length()];for (i=0; i<t.length(); i++) {text[i] = t.charAt(i);}try {mOutputStream.write(new String(text).getBytes());mOutputStream.write('\n');} catch (IOException e) {e.printStackTrace();}}return false;}});
参考文章:http://blog.csdn.net/u010825468/article/details/42874709
阅读全文
0 0
- EditText中onEditorAction监听事件执行两次
- EditText中onEditorAction监听事件执行两次
- EditText监听事件setOnEditorActionListener onEditorAction执行两次
- 防止EditText的KEY事件执行两次
- EditText的触摸事件 执行两次分析
- Android中Edittext监听回车事件
- onEditorAction不执行
- JavaSwing中itemStateChanged事件执行两次
- 键盘事件 OnEditorAction
- 完美解决editText监听键盘回车会执行两次的解决方法
- android:windowSoftInputMode属性详解以及editText监听键盘回车会执行两次的解决方法
- EditText的监听事件
- EditText监听事件
- 解决dispatchKeyEvent监听执行两次
- 解决dispatchKeyEvent监听执行两次
- 监听事件中函数的执行顺序
- EditText中进行文字截获和事件监听
- Android中EditText监听软键盘的事件
- 一款APP,从设计稿到切图(Android篇)
- 微信文件找回
- 深度学习五:tensorboard使用记录(windows)
- 【大话数据结构】线性表:顺序表和链表
- SVN在Android Studio中的配置
- EditText中onEditorAction监听事件执行两次
- Java反射机制详解
- RxJava
- Tomcat学习—Tomcat的tomcat-user.xml配置文件
- Codeforces 818D Multicolored Car【思维+线段树】
- caffe"convert_imageset mdb_status == 0 (22 vs. 0)"错误分析
- 学习笔记——Unity3D
- HDU 4352 XHXJ's LIS
- eval调研