Android: getText и setText не работают над EditText с OnKeyListener

#android #android-edittext #gettext #settext

#Android #android-edittext #gettext #settext

Вопрос:

Я работаю над приложением для Android и у меня есть представление с 3 EditTexts. Чего я пытаюсь добиться, так это того, что при нажатии цифровой клавиши в последней следует вызвать событие okKey для этого действия. Проблема в том, что для EditText, для которого я установил OnKeyListener, ни методы getText, ни методы setText не работают. Позвольте мне объяснить:

Предположим, я инициализирую пустую строку

 String string1 = "";
  

В моем методе onCreate я устанавливаю OnKeyListener для одного из EditTexts

 @Override
public void onCreate(Bundle savedInstanceState) {
    ...
    findViewById(R.id.EditText3).setOnKeyListener(this);
    ...
}
  

Теперь, если я напишу следующий код в переопределяющем методе okKey

 @Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (keyCode >= KeyEvent.KEYCODE_0 amp;amp; keyCode <= KeyEvent.KEYCODE_9) {
        string1  = ((EditText) findViewById(R.id.EditText1)).getText();
        string1  = ((EditText) findViewById(R.id.EditText2)).getText();
        string1  = ((EditText) findViewById(R.id.EditText3)).getText();

        ((EditText) findViewById(R.id.EditText1)).setText("");
        ((EditText) findViewById(R.id.EditText2)).setText("");
        ((EditText) findViewById(R.id.EditText3)).setText("");
    }
return false;
}
  

Очищаются только editText1 и editText2, а текст в EditText3 не объединяется со string1. Если я заменю условие оператора If на

 if (keyCode == KeyEvent.KEYCODE_ENTER)
  

затем при нажатии клавиши Enter (устанавливается как Next) все работает, как ожидалось. Я также попытался добавить setText («») в метод onResume действия, но результат не изменился. Я ценю время, которое вы потратили на чтение моего вопроса!

Отредактировано: добавлено «return false;» в конце метода OnKey, он был у меня в работе, но я пропустил его в этом вопросе, о чем напомнил ответ Криса.

Ответ №1:

Когда вы устанавливаете OnKeyListener в свой EditText3, вы заменяете то, что происходит при нажатии клавиши, этим. Попробуйте return false; в конце OnKey. Это должно передать значение в нужное место.

http://developer.android.com/reference/android/view/View.OnKeyListener.html

ВОЗВРАТ

True, если прослушиватель использовал событие, false в противном случае.

Комментарии:

1. Извините, я должен был упомянуть (или вставить пример кода), что я возвращаю false в конце метода OnKey.

2. @Mark, ваше предложение — это ответ, оно решило проблему! Спасибо, чувак! Не могли бы вы вставить свой комментарий в ответ на вопрос, чтобы я мог пометить его как ответ?

Ответ №2:

В дополнение к ответу Криса следует добавить проверку, чтобы гарантировать, что event.getAction() равно KeyEvent .ACTION_UP; OnKey вызывается дважды, и если getAction() имеет значение ACTION_DOWN (при первом вызове метода), символ еще не будет добавлен в последовательность символов, возвращаемую getText().