【问题标题】:OnKeyListener stops working after soft keyboard is hidden隐藏软键盘后 OnKeyListener 停止工作
【发布时间】:2016-12-07 12:03:59
【问题描述】:

在片段上,我有以下 OnKeyListener。如果它当前显示,我用它来隐藏该片段内部的视图。如果未显示,我不会使用按键,而 Android 会。

    getView().setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if ((keyCode == KeyEvent.KEYCODE_BACK) && (event.getAction() == KeyEvent.ACTION_DOWN)) {
                if (isSomeViewShowing) {
                    hideSomeView();
                    return true;
                }
                // Back pressed but view is not showing. Not consuming the event.
                return false;
            }
            // Back not pressed. Not consuming the event.
            return false;
        }
    });

当视图不存在时隐藏视图并进入正常的 Fragment/Activity 后台堆栈效果很好,但如果用户使用软键盘在 EditText 中输入文本然后隐藏键盘,它就会停止工作。

我知道 OnKeyListener 不适用于软键盘,这可以满足我的需求。我只需要监听器在输入完成并隐藏键盘后继续工作。

有没有办法防止这种情况发生?

一种解决方法是listen for when keyboard is dismissed 并在键盘关闭时再次添加 OnKeyListener,但实现这一点对于简单的任务来说增加了太多的复杂性。

【问题讨论】:

    标签: android android-fragments keyboard


    【解决方案1】:

    您可以在使用fragmentactivity 中覆盖onBackPressed(),然后他们会向fragment 发送一条消息以知道按下了返回键。像这样的:

    活动:

    /**
     * Triggered when the user press back button
    */
    @Override
    public void onBackPressed(){
    
        mYourFragment.onBackPressed();
    
    }
    

    片段:

    public void onBackPressed(){
    
        if (isSomeViewShowing) {
            hideSomeView();
        }
    
    }
    

    【讨论】:

    • 谢谢。我已经在其他 Fragment 上完成了此操作,但我不喜欢如果不对 Activity 进行更改就无法实现它们。无论如何我都会这样做,因为它似乎是唯一真正解决问题的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2016-02-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    相关资源
    最近更新 更多