【问题标题】:Android, handle onBackPressed while drawer is showingAndroid,在抽屉显示时处理 onBackPressed
【发布时间】:2014-07-14 09:42:28
【问题描述】:

默认情况下,当抽屉显示并按下BackButton 时,它会自动关闭。 但我希望当它显示并且用户点击BackButton 时,关闭应用程序。 我尝试了这些解决方案,但没有奏效:

Navigation drawer, handling the back button to go to previous fragments

Backbutton press from android navigation drawer

【问题讨论】:

  • 有一个布尔值来检查导航抽屉是否在 onBackPressed() 中打开
  • 我做到了,但是当抽屉打开时它不检查 if 子句。

标签: android drawer


【解决方案1】:

onBackPressed 不会在抽屉打开时被调用,或者说如果您的键盘已打开,那么您的后退键也会变为向下箭头。因此,当您按下该向下键时,您的键盘将隐藏,您的 onBackPressed 将不会被调用。

当您再次按下返回按钮时,您的应用将关闭。键盘也是如此。

所以先关闭抽屉,然后再按返回键,你的应用就完成了

【讨论】:

    【解决方案2】:

    首先覆盖你的活动,然后可以检查抽屉是否打开

    mDrawerLayout.isDrawerOpen(GravityCompat.START);
    

    如果返回 true,只需关闭您的应用即可。

    重要提示:检查您的抽屉重力。

    尝试像这样将您的片段注册为后按:

    public void registerBackButton()
    {
        if (getView() != null)
        {
            getView().setFocusableInTouchMode(true);
            getView().requestFocus();
            final BaseFragment frag = this;
            getView().setOnKeyListener(new OnKeyListener()
            {
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event)
                {
                    if (event.getAction() != KeyEvent.ACTION_DOWN)
                    {
                        if (keyCode == KeyEvent.KEYCODE_BACK)
                        {
                            if (isVisible())
                            {
                                return frag.onFragmentBackPressed();
                            }
                        }
                    }
    
                    return false;
                }
            });
        }
    }
    

    现在在 onFragmentBackPressed 中检查抽屉是否已打开,如上所述。

    【讨论】:

    • 抽屉打开时不检查 if 子句。
    • 你的意思是说onBackPressed没有被调用??
    • 是的!检查自己买
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多