Страница 1 из 1

Считывание данных из EditText по окончании ввода

Добавлено: 14 май 2012, 16:43
AndreyI
Подскажите, пожалуйста!
Как организовать обработку пользовательского ввода из EditText. Данные должны считываться после того, как пользователь закончил ввод. В учебниках рекомендуют отслеживать нажатие клавиши "Ввод" на клавиатуре.

Код: Выделить всё

final EditText edittext = (EditText) findViewById(R.id.edittext);
edittext.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        // If the event is a key-down event on the "enter" button
        if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
            (keyCode == KeyEvent.KEYCODE_ENTER)) {
          // Perform action on key press
          Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
          return true;
        }
        return false;
    }
});
Но дело в том, что пользователь может закончить ввод и нажатием на кнопку "Возврат", при этом убирается клавиатура, но вызова вышеуказанного метода не происходит. Как отследить еще и нажатие на кнопку "Возврат"?

Re: Считывание данных из EditText по окончании ввода

Добавлено: 15 май 2012, 18:11
AndreyI
Перерыл весь Инет.
Похоже что простого решения нет :(
Но выкрутиться можно только расширив класс EditText с переопределением метода onKeyPreIme. Это не есть гуд.

Re: Считывание данных из EditText по окончании ввода

Добавлено: 15 май 2012, 18:53
andev
AndreyI писал(а):В учебниках рекомендуют отслеживать нажатие клавиши "Ввод" на клавиатуре.
В каких это учебниках, разрешите полюбопытствовать?
Возможно, стоит попробовать отслеживать потерю фокуса?

Re: Считывание данных из EditText по окончании ввода

Добавлено: 15 май 2012, 19:41
AndreyI
andev писал(а): В каких это учебниках, разрешите полюбопытствовать?
Пример взят из Developer's Guide
andev писал(а): Возможно, стоит попробовать отслеживать потерю фокуса?
Не вариант, при нажатии на хард-кнопку "возврат", скрывается клава, а фокус остается в поле ввода.

Re: Считывание данных из EditText по окончании ввода

Добавлено: 15 май 2012, 20:11
AndreyI
Короче, проблему пока решил, как и писал выше, расширением класса EditText, в котором переопределил метод onKeyPreIme следующим образом:

Код: Выделить всё

@Override
	public boolean onKeyPreIme(int keyCode, KeyEvent event) {
		return super.dispatchKeyEvent(event);}
После этого функция обратного вызова onKey (см. 1-й пост) стала вызываться и при нажатии на хард-кнопку "возврат". Естественно, помимо проверки на KeyEvent.KEYCODE_ENTER нужно еще добавить проверку на KeyEvent.KEYCODE_BACK, а 10-ю строку (return true;) лучше убрать, чтоб она не мешала закрыть activity нажатием на кнопку "возврат".

В общем, если кто подскажет более красивое решение буду только рад. Но я надеюсь, что когда-нибудь разработчики Андроид устранят эту недоработку.