首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当用户按下后退按钮时隐藏导航抽屉

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

Stack Overflow用户
提问于 2014-11-10 05:52:16
回答 8查看 29.6K关注 0票数 24

我按照谷歌的官方开发者教程here创建了一个导航抽屉。

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

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

代码语言:javascript
复制
   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);
                }
            }
        }
    });

当用户使用原生的“后退”按钮返回时,如何关闭导航抽屉?任何建议都很感谢。谢谢!

EN

回答 8

Stack Overflow用户

发布于 2014-11-10 06:12:40

您需要覆盖活动中的onBackPressed(),并检查导航抽屉是否打开。如果它是打开的,则关闭它,否则执行正常的背压方法。以下是一些混合了伪代码的代码,可以帮助您:

代码语言:javascript
复制
@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();
  }
}

要替换伪代码,请查看抽屉的文档。我知道这两种方法都存在。

票数 10
EN

Stack Overflow用户

发布于 2016-10-03 14:11:33

这是你的问题的另一个解决方案。

代码语言:javascript
复制
@Override    
public void onBackPressed(){    
    if(drawerLayout.isDrawerOpen(navigationView)){    
        drawerLayout.closeDrawer(navigationView);    
    }else {    
        finish();    
    }    
}    
票数 5
EN

Stack Overflow用户

发布于 2014-11-10 08:18:38

使用@James Cross提供的答案的实现可以工作,但关闭抽屉的动画是不受欢迎的,并且在没有太多麻烦的情况下无法修复,example

代码语言:javascript
复制
@Override
public void onResume()
{
    super.onResume();
    mDrawerLayout.closeDrawers();
}

解决方法是在按下设备后退按钮时重新启动活动。它对我来说似乎不是理想的,但它是有效的。根据@mt0s和@Qazi Ahmed的建议覆盖onBackPressed(),并传递一个额外的参数来确定调用活动:

代码语言:javascript
复制
    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中,检查调用活动:

代码语言:javascript
复制
@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时,抽屉都会关闭,没有动画。可能有更好的方法来做到这一点。我的应用程序目前相对简单,这是有效的,但我等待一个更有效的方法,如果有人有一个。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26833741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档