Мое приложение Android содержит EditText представление, в котором можно вводить несколько коротких сообщений (одной строкой).Нажатие клавиши DONE на клавиатуре добавит сообщение к представлению журнала выше ( TextView ) и очистит представление ввода.
Вот фрагмент из моего представления 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 .
@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 видимым.
Решение
Как указано в принятом ответе, это (не так много) известная ошибка ОС Android.Простое решение - очистить представление EditText другим способом:
TextKeyListener.clear(mInputView.getText());