用户按下后退按钮时隐藏导航抽屉

pez*_*pez 23 navigation android navigation-drawer

我已经按照谷歌的官方开发教程在这里创建抽屉式导航.

目前,一切正常,除非用户使用Android在屏幕底部提供的本机后退按钮(以及主页和最近的应用程序按钮).如果用户使用此本机后退按钮导航回来,导航抽屉仍将打开.如果用户使用ActionBar导航回来,导航抽屉将像我希望的那样关闭.

我的代码几乎与官方教程完全相同,除了我如何处理用户在抽屉上选择项目:

   mDrawerList.setOnItemClickListener(new ListView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView parent, View view, int position, long id)
        {
            switch(position)
            {
                case 0:
                {
                    Intent intent = new Intent(MainActivity.this, NextActivity.class);
                    startActivity(intent);
                }
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

当用户使用本机后退按钮导航回来时,如何关闭导航抽屉?任何建议表示赞赏 谢谢!

mt0*_*t0s 60

你必须覆盖onBackPressed().来自文档:

当活动检测到用户按下后退键时调用.默认实现只是完成当前活动,但您可以覆盖它以执行您想要的任何操作.

所以你可以得到这样的代码:

@Override
public void onBackPressed() {
    if (this.drawerLayout.isDrawerOpen(GravityCompat.START)) {
        this.drawerLayout.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果打开,此方法将关闭它,否则将回退到默认行为.

  • 使用`isDrawerVisible`而不是`isDrawerOpen`如果你想在按下后退按钮时关闭抽屉,而不是在此时关闭应用程序. (2认同)

qaz*_*sab 10

您需要覆盖onBackPressed()活动并检查导航抽屉打开的情况.如果它是打开的,则关闭它,否则执行正常的反压方法.这里有一些代码与一些伪代码混合来帮助你:

@Override
public void onBackPressed(){
  if(drawer.isDrawerOpen()){ //replace this with actual function which returns if the drawer is open
   drawer.close();     // replace this with actual function which closes drawer
  }
  else{
   super.onBackPressed();
  }
}
Run Code Online (Sandbox Code Playgroud)

要替换抽屉文档中的伪代码外观.我知道这两种方法都存在.


Vik*_*ari 5

这是您问题的替代解决方案。

@Override    
public void onBackPressed(){    
    if(drawerLayout.isDrawerOpen(navigationView)){    
        drawerLayout.closeDrawer(navigationView);    
    }else {    
        finish();    
    }    
}    
Run Code Online (Sandbox Code Playgroud)