Android: getText и setText не работают на EditText с помощью onKeyListener - PullRequest
1 голос
/ 14 июня 2011

Я работаю над приложением для 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 && 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 не соединяется со строкой1. Если я заменю условие оператора If на

if (keyCode == KeyEvent.KEYCODE_ENTER)

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

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

Ответы [ 2 ]

1 голос
/ 14 июня 2011

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

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

Возвращает

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

0 голосов
/ 14 июня 2011

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

...