EditText无法输入删除(手动显示隐藏软键盘/EditText无法弹出软键盘)问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/heming9174/article/details/79577337

EditText无法输入删除(手动显示隐藏软键盘后/EditText无法弹出软键盘)问题

新公司,刚刚接手的项目,需要解一些当前存在的BUG.

问题整体由来:

  1. EditText在执行查询数据库后无法弹出软键盘,
  2. 手动执行显示/隐藏软键盘方法,
  3. 发现新问题 ==> 页面进行两次指定操作后EditText无法输入/删除内容.

了解了BUG的问题由来,想到导致该BUG的问题一般是:

  1. EditText焦点问题
  2. 那次查询数据库操作问题
  3. 输入法问题

问题分析

1.EditText焦点问题.

在导致无法输入/删除EditText内容的操作之前,添加代码

siteCode.setClickable(true);
siteCode.setFocusable(true);
siteCode.setFocusableInTouchMode(true);

手动设置赋予焦点,屏幕上手动选择EditText…
还是不行.
调用dispatchKeyEvent方法,
对KeyEvent.ACTION_DOWN和KeyEvent.KEYCODE_DEL进行监听,手动删除EditText内容.
结果发现在无法删除/输入时,无法获取本次点击事件传递,


2. 那次查询数据库操作问题

看了下查询数据库的操作的代码,
发现居然还是写在主线程,令人窒息.
修改代码,改为子线程.
常规查询操作,数据量不大.
还是不行
由于刚刚跳转到该Activity后会执行一次查询操作,数据库内容不变,
额外创建一个集合对查询到的数据进行保存,
后续在需要执行该查询操作,使用额外创建的集合数据进行替换,无需查询.
该问题暂时缓解,更多次调用还是会复现,
排除数据库操作原因


3. 输入法问题

EditText无法删除/输入是因为无法弹出软键盘,
手动调用显示/隐藏 软键盘导致.

在无法删除/输入时,下拉状态栏,切换输入法,
完全OJBK!
返回,重新操作几次,WTF…
再次下拉状态栏,切换输入法,又OK了.
由于APP是提供给快递员扫描枪使用,各种禁掉下拉状态栏,HOME键等等…
只有固定型号的测试机才可以下拉状态栏,
而且无法用代码去进行切换输入法(如果只有一个输入法怎么办)…
继续找原因…

突然想起了一个东西,其实重点不是我切换输入法,而是我下拉状态栏的时候,该Activity可见,不可触及,无法交互.触发了onPause()生命周期方法.
onPause()是清除当前页面所有焦点,返回onResume()再重新赋予.

写个手动清除焦点和赋予焦点的方法试试…

//清除页面所有焦点
private void cleanFocus() {
    getWindow().getDecorView().clearFocus();
}
cleanFocus();
siteCode.setClickable(true);
siteCode.setFocusable(true);
siteCode.setFocusableInTouchMode(true);

在导致EditText无法输入/删除操作之前执行该操作
清除所有焦点,再对EditText焦点进行赋予.

可以了.


问题总结:

回想一下本次因为修复无法弹出软键盘后导致无法输入/删除EditText问题的原因.

在出现BUG的操作时,弹出软键盘状态发生了变化,默认为数字键盘,但是在BUG操作时弹出的软键盘状态为 拼音键盘.(EditText xml属性设置为 数字键盘).

应该是手动显示/隐藏输入法的时候导致焦点被软键盘获取,无法赋予给EditText.

这种问题还是头一次碰到,真是奇葩啊…
果断记录一下.

猜你喜欢

转载自blog.csdn.net/heming9174/article/details/79577337