繁体   English   中英

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

[英]ActionBarActivity back button not popping from backstack

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

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

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有没有理由打破后退按钮?

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

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

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

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

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

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

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

这样, ActionBarActivity.onBackPressed()仅在backstack为空时调用,在这种情况下它会破坏ActionBarActivity

您应该检查“getFragmentManager”和“getSupportFragmentManager”是否与您的活动和actionbaractivity匹配。

因为,在活动中:

public void onBackPressed() {
    if (!mFragments.popBackStackImmediate()) {
        finish();
    }
}

在FragmentActivity中:

public void onBackPressed() {
    if (!mFragments.popBackStackImmediate()) {
        finish();
    }
}

我们可以看到已经处理过pop片段backstatck的相同代码。 在我的情况下,我使用actionbaractivity(扩展FragmentAcvitiy),但我也使用“getFragmentManager”,所以我得到了和你一样的错误。 在我将“getFragmentManager”替换为“getSupportFragmentManager”之后,没关系! 您还可以将“actionbaractiviy”替换为“Activity”来解决此问题。

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

如果您想在API等级11或更高级别添加操作栏,您可以在下面看到:

https://developer.android.com/guide/topics/ui/actionbar.html#Adding

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM