我按照谷歌的官方开发者教程here创建了一个导航抽屉。
目前,一切正常,除了用户使用Android在屏幕底部提供的原生后退按钮(以及主页和最近的应用程序按钮)。如果用户使用本机back按钮返回导航,则导航抽屉仍将打开。如果用户使用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);
}
}
}
});
当用户使用原生的“后退”按钮返回时,如何关闭导航抽屉?任何建议都很感谢。谢谢!
发布于 2014-11-10 06:12:40
您需要覆盖活动中的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();
}
}
要替换伪代码,请查看抽屉的文档。我知道这两种方法都存在。
发布于 2016-10-03 14:11:33
这是你的问题的另一个解决方案。
@Override
public void onBackPressed(){
if(drawerLayout.isDrawerOpen(navigationView)){
drawerLayout.closeDrawer(navigationView);
}else {
finish();
}
}
发布于 2014-11-10 08:18:38
使用@James Cross提供的答案的实现可以工作,但关闭抽屉的动画是不受欢迎的,并且在没有太多麻烦的情况下无法修复,example。
@Override
public void onResume()
{
super.onResume();
mDrawerLayout.closeDrawers();
}
解决方法是在按下设备后退按钮时重新启动活动。它对我来说似乎不是理想的,但它是有效的。根据@mt0s和@Qazi Ahmed的建议覆盖onBackPressed()
,并传递一个额外的参数来确定调用活动:
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);
//pass int extra to determine calling activity
intent.putExtra(EXTRA_CALLING_ACTIVITY, CallingActivityInterface.MAIN_ACTIVITY);
startActivity(intent);
}
}
}
});
在NextActivity.class
中,检查调用活动:
@Override
public void onBackPressed()
{
int callingActivity = getIntent().getIntExtra(EXTRA_CALLING_ACTIVITY, CallingActivityInterface.MAIN_ACTIVITY);
switch(callingActivity)
{
case CallingActivityInterface.MAIN_ACTIVITY:
{
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
...
}
}
这样,无论我使用up按钮还是back按钮,当我返回到MainActivity
时,抽屉都会关闭,没有动画。可能有更好的方法来做到这一点。我的应用程序目前相对简单,这是有效的,但我等待一个更有效的方法,如果有人有一个。
https://stackoverflow.com/questions/26833741
复制相似问题