首页 > 解决方案 > 观察 EditText 键时 OnBackPressed 不起作用

问题描述

我有 EditText 的扩展,我正在监听来自 EditText 键盘的事件。我需要知道用户何时按下任何按钮以显示(或不显示)错误。所以我为键(rxbinding2)设置了 Observable 并且我得到了任何按下但是当我按下后退按钮和光标仍然在这个 EditText 方法中时 onBackPressed 不起作用。如何过滤onBack按下?

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())) }
}

标签: androidkotlinrx-androidrx-kotlinrx-binding

解决方案


只听keydown事件。这应该在它被交给你的 UI 元素之前触发。super 会将其传递给父级以进行正常流程。我不记得它是返回真还是假,但我认为处理后是真的。

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

推荐阅读