EditText не показывает текущий ввод (Android 4) - PullRequest
5 голосов
/ 30 января 2012

Мое приложение 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());

Ответы [ 3 ]

3 голосов
/ 24 февраля 2012

У меня была точно такая же проблема, даже на более низких уровнях API.Существует ошибка при использовании:

editText.setText("");

много раз для очистки EditText.Вот обходной путь, который помог:

TextKeyListener.clear(editText.getText());

Вы можете прочитать об этой ошибке на сайте Google Code: http://code.google.com/p/android/issues/detail?id=17508

Надеюсь, это поможет!

1 голос
/ 18 февраля 2012

попробуйте установить OnClickListener на готовой кнопке. Пусть onClick(View v) будет выглядеть так:

@Override
public void onClick(View v){
    kontextTV1.setText(editText1.getText.toString());
}

Если вы нажмете текст, когда пользователь нажмет кнопку «Готово», вам не нужно будет использовать класс наблюдателя. Это также должно работать на всех версиях Android. (Get / Set для edittext и textview вряд ли изменятся). Это будет обрабатывать

Если вы хотите обработать кнопку «Готово» на клавиатуре, попробуйте:

editText1.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(final View v, final int keyCode, final KeyEvent event) {
    if (KeyEvent.KEYCODE_ENTER == keyCode) {
        //...
    }
}
0 голосов
/ 18 февраля 2012

Почему бы не использовать afterTextChanged вместо editorActionListener?

...