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

Интерфейс, диалоги, темы, стили, меню
Ответить
AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 14 май 2012, 16:43

Подскажите, пожалуйста!
Как организовать обработку пользовательского ввода из 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;
    }
});
Но дело в том, что пользователь может закончить ввод и нажатием на кнопку "Возврат", при этом убирается клавиатура, но вызова вышеуказанного метода не происходит. Как отследить еще и нажатие на кнопку "Возврат"?

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 15 май 2012, 18:11

Перерыл весь Инет.
Похоже что простого решения нет :(
Но выкрутиться можно только расширив класс EditText с переопределением метода onKeyPreIme. Это не есть гуд.

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

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

Сообщение andev » 15 май 2012, 18:53

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

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 15 май 2012, 19:41

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

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 15 май 2012, 20:11

Короче, проблему пока решил, как и писал выше, расширением класса 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 нажатием на кнопку "возврат".

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

Ответить