#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().