Android ActionBarActivity后退按钮未从后退中弹出

Android ActionBarActivity后退按钮未从后退中弹出,android,android-fragments,android-5.0-lollipop,android-actionbaractivity,Android,Android Fragments,Android 5.0 Lollipop,Android Actionbaractivity,我使用这个模板只是为了尝试材料设计,所以我实现了一些片段,有些片段有网络视图,有些片段没有 我的问题是当在片段之间切换时,我可以看到它们被成功地添加到backbackback中 getFragmentManager().beginTransaction().replace(R.id.container, new FAQ()).addToBackStack("FAQ").commit(); 但当我按下后退按钮时,它只会关闭应用程序 当我将其更改为使用Activity而不是ActionBarAct

我使用这个模板只是为了尝试
材料设计
,所以我实现了一些片段,有些片段有网络视图,有些片段没有

我的问题是当在片段之间切换时,我可以看到它们被成功地添加到backbackback中

getFragmentManager().beginTransaction().replace(R.id.container, new FAQ()).addToBackStack("FAQ").commit();
但当我按下后退按钮时,它只会关闭应用程序

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

后退按钮上有一个超控

@Override
public void onBackPressed() {
   if (mNavigationDrawerFragment.isDrawerOpen())
       mNavigationDrawerFragment.closeDrawer();
   else
       super.onBackPressed();
}
但即使移除了它,它仍然会发生。我认为问题在于
super.onBackPressed

是否有任何原因
ActionBarActivity
会破坏后退按钮?

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

事实上,根据:

当活动检测到用户按下后退键时调用。默认实现只是完成当前活动,但是您可以覆盖它来做任何您想做的事情

而且看起来,即使在5.0之前用后退按钮弹出backbackback,谷歌也会用新的
ActionBarActivity
改变这种行为

就我而言,我使用了一些适用于我的Workaround,但可能不适用于所有人,这取决于您的导航实现

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

@Override
public void onBackPressed()
{
    if (mDrawerLayout.isDrawerOpen()) {
        mDrawerLayout.closeDrawer();
    } else if (getFragmentManager().getBackStackEntryCount() > 0) {
        getFragmentManager().popBackStack();
    } else {
        super.onBackPressed();
    }
}
这样,只有当backbackback为空时才会调用
ActionBarActivity.onBackPressed()
,在这种情况下,它会销毁
ActionBarActivity
,您应该检查“getFragmentManager”和“getSupportFragmentManager”是否与您的活动和ActionBarActivity匹配

因为,在活动中:

public void onBackPressed() {
    if (!mFragments.popBackStackImmediate()) {
        finish();
    }
}
在零碎的活动中:

public void onBackPressed() {
    if (!mFragments.popBackStackImmediate()) {
        finish();
    }
}
public void onBackPressed() {
    if (!mFragments.popBackStackImmediate()) {
        finish();
    }
}
我们可以看到已经在backstack中处理pop片段的代码。 在我的情况下,我使用了actionbaractivity(扩展FragmentAcvity),但我也使用了“getFragmentManager”,所以我得到了与您相同的错误。在我将“getFragmentManager”替换为“getSupportFragmentManager”之后,没关系!您还可以将“actionbaractiviy”替换为“Activity”,以解决此问题

必须确保“getFragmentManager”匹配“活动”,“getSupportFragmentManager”匹配“FragmentActivity(ActionbarActivity)”。

如果您想在API 11级或更高级别上添加actionbar,您可以看到以下内容:

API级别11或更高 所有使用Theme.Holo主题(或其后代之一)的活动中都包含操作栏,当targetSdkVersion或minSdkVersion属性设置为“11”或更高时,这是默认主题。如果不希望活动使用操作栏,请将活动主题设置为theme.Holo.NoActionBar


这是有点令人沮丧的行为!至少我喜欢。没有关于ActionBarActivity与Activity不同行为的文档,也不应该有关于onBackPressed等基本元素的文档,对吗?除了在非官方android网站/博客/帖子等上投入数小时的调查外,开发者应该如何知道这些事情@如果你能找到你正在写的那篇文章,那就太棒了@degill我刚刚更新了答案,没有找到关于它的帖子,但我可能在官方文档中找到了。我同意这很奇怪,但我猜之前的行为是一个“错误”,他们决定在
ActionBarActivity
中修复它(我只是猜测).有趣的是,当ActionBarActivity中的实现完成活动时,onBackPressed在活动中的实际实现实际上会弹出后堆栈,但官方文档说明了相反的情况,并且更加混乱:使用v7 ActionBarActivity,在替换一些片段后,每次都执行addToBackStack当我按下后退按钮时,我的活动就会重新开始……这简直是胡说八道:-\@degill嗯,是的,这确实很奇怪,尽管我觉得这没什么大不了的;)