我的 Android 应用程序包含一个EditText http://developer.android.com/reference/android/widget/EditText.html查看可以在其中键入一些短消息(单行)。按键盘的DONE键会将消息附加到上面的日志视图中(TextView http://developer.android.com/reference/android/widget/TextView.html)并清除输入视图。
这是我的视图 xml 中的一个片段:
<LinearLayout ...>
<TextView
android:id="@+id/logView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/inputView"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:imeOptions="actionDone"
android:singleLine="true" />
</LinearLayout>
为了处理输入并重置视图,我使用OnEditorActionListener http://developer.android.com/reference/android/widget/TextView.OnEditorActionListener.html.
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
...
String input = mInputView.getText().toString();
mInputView.setText(""); // clear the input view
...
}
问题
我在 Android 1.6 - 3 上没有遇到任何问题。但是从 IceCreamSandwich (>= Android 4) 开始,有一个奇怪的错误间歇性地发生(大多数情况下在大约 10-30 个输入之后)。
当您键入一些文本时,输入视图保持空白。光标仍然在位置 0 上闪烁,没有显示任何文本。虽然点击一下DONE将(不可见)文本添加到上面的日志视图中,并且可以读取该文本。隐藏键盘还可以使 EditText 视图中的文本可见。
Solution
正如已接受的答案中所述,这是 Android 操作系统的一个(不太)已知的错误。简单的解决方案是以不同的方式清除 EditText 视图:
TextKeyListener.clear(mInputView.getText());