我的应用程序中有一个EditText。这个editText使用editText.setText方法每10秒通过代码更新一次。我想在用户打开软键盘时停止此更新。当用户完成其键入操作(按完成)按钮时,我想从editText.setText恢复更新。 我已经尝试使用InputMethodManager isActive(View)来检查我的EditText当前是否在使用editText.setText方法时处于活动状态。当键盘显示时,这完全有效。但是当用户点击完成按钮并且软键盘被隐藏时,isActive(View)仍然给出true并且我的editText.setText没有被调用。 下面是我的代码,它每10秒更新一次editText。
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(!imm.isActive(editText)){
editText.setText("10.2");
}
因此即使在用户按下软键盘的完成按钮后,此imm.isActive(editText)也会返回true。 请建议任何方法来完成这项工作。
答案 0 :(得分:0)
解决方案1
创建一个布尔控件变量isKeyboardVisible
并在显示键盘时将其设置为true
,隐藏它时false
。在调用setText()
之前检查其值。
解决方案2
一个替代的,有点hacky的解决方案是将两个更改EditText
块内synchronized
值的部分括起来。这样,每个部分都会在执行之前等待另一部分完成。
解决方案3
您可以listen EditText
的焦点更改事件并对其做出反应。它们往往与显示/隐藏自己的软键盘重合。