ActionBarActivity后退按钮不会从后台弹出

Lac*_*ook 13 android android-fragments android-actionbaractivity android-5.0-lollipop

我正在使用这个模板https://github.com/kanytu/android-material-drawer-template只是为了尝试material design所以我实现了一些片段,有些网页视图有些没有.

我的问题是在片段之间切换时我可以看到它们被成功添加到后台堆栈中

getFragmentManager().beginTransaction().replace(R.id.container, new FAQ()).addToBackStack("FAQ").commit();
Run Code Online (Sandbox Code Playgroud)

但是当我按下后退按钮时,它就会关闭应用程序.

当我改为使用Activity而不是ActionBarActivity导航工作正常,但我失去了一些其他功能.

后退按钮上有一个覆盖

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

但即使被删除它仍然会发生.我认为这个问题存在于某个方面super.onBackPressed

有什么理由ActionBarActivity可以打破后退按钮吗?

Mat*_*ree 21

我最近读了一篇关于此的帖子,抱歉我找不到了......但基本上,它解释了后退按钮的主要功能是完成当前Activity.

事实上,根据onBackPressed()官方文档:

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

而且看起来即使后面的按钮用于在5.0之前弹出后台堆叠,谷歌也会用新的改变这种行为ActionBarActivity.

就我而言,我使用了一些对我有用的workarround,但这可能对每个人都不起作用,具体取决于你的导航实现.

但如果它对某人有帮助,这里是:

@Override
public void onBackPressed()
{
    if (mDrawerLayout.isDrawerOpen()) {
        mDrawerLayout.closeDrawer();
    } else if (getFragmentManager().getBackStackEntryCount() > 0) {
        getFragmentManager().popBackStack();
    } else {
        super.onBackPressed();
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,ActionBarActivity.onBackPressed()只在后台堆栈为空时调用,在这种情况下它会破坏ActionBarActivity.