通过软输入键盘修改EditText时,防止editText.setText

时间:2013-10-22 15:48:00

标签: android android-edittext android-softkeyboard simultaneous

我的应用程序中有一个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。 请建议任何方法来完成这项工作。

1 个答案:

答案 0 :(得分:0)

解决方案1 ​​

创建一个布尔控件变量isKeyboardVisible并在显示键盘时将其设置为true,隐藏它时false。在调用setText()之前检查其值。

解决方案2

一个替代的,有点hacky的解决方案是将两个更改EditText块内synchronized值的部分括起来。这样,每个部分都会在执行之前等待另一部分完成。

解决方案3

您可以listen EditText的焦点更改事件并对其做出反应。它们往往与显示/隐藏自己的软键盘重合。