OnBackPressed не работает, когда наблюдаешь EditText KEys - PullRequest
0 голосов
/ 30 августа 2018

У меня есть расширение EditText, где я слушаю события с клавиатуры EditText. Мне нужно знать, когда пользователь нажимает любую кнопку, чтобы показать (или не показать) ошибку. Поэтому я делаю Observable для клавиш (rxbinding2) и получаю любое нажатие, но когда я нажимаю кнопку «Назад» и курсор все еще в этом методе EditText, onBackPressed не работает. Как отфильтровать на спине нажатых?

fun EditText.changeWithFormatting(formatter: (String) -> String): Observable<String> {
    return Observable.merge(
            afterTextChangeEvents()
                    .map { editableText },
            keys()
                    .filter { it.action == KeyEvent.ACTION_UP }
                    .map { editableText }
    )
            .map { changeText(formatter(it.toString())) }
}

1 Ответ

0 голосов
/ 30 августа 2018

Просто слушайте событие keydown. Это должно сработать, прежде чем оно будет передано вашему элементу пользовательского интерфейса. супер передаст его родителю для нормального потока. Я не могу вспомнить, вернул ли он true или false, но я думаю, что это верно для обработанного.

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
   {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) 
        {
            onBackPressed();
            return true; 
        }
        return super.onKeyDown(keyCode, event);
   }
...