Android碎片简单背面



我有一个活动,其中一个容器将接收2个片段。一旦活动初始化,我就会以:

开始第一个片段
showFragment(new FragmentA());
private void showFragment(Fragment fragment) {
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, fragment, fragment.getTag())
            .addToBackStack(fragment.getTag())
            .commit();
}

然后,当用户单击Fragmenta时,我会收到此单击活动级别,然后致电:

showFragment(new FragmentB());

现在,当我按下返回按钮时,它会返回到片段A(正确)A(正确),当我再次按下后面按钮时,它会显示空屏幕(但要保留在同一活动中)。我希望它只是关闭应用程序(因为活动没有父母)。

有很多与片段和背面有关的帖子,但是我找不到一个简单的解决方案。我想避免我必须检查我是否在片段A或片段B上进行后退的情况,因为我可能会扩展片段的数量,并且需要维护该方法。

您正在获取空白屏幕,因为当您第一次添加片段时,您是calling addToBackStack(),因此您在不知不觉中添加空白屏幕!

现在您能做的就是调用onBackPressed()中的以下方法,您的问题将被解决

  public void moveBack()
    {
//FM=fragment manager
        if (FM != null && FM.getBackStackEntryCount() > 1)
         {
           FM.popBackStack();
         }else {
           finish();
         }
    }

请勿在onbackpressed();

中调用超级

只需调用上述方法!

addtobackstack(fragment.getTag())

仅用于片段B,而不是片段a

我认为您的片段A未正确弹出,请尝试使用添加片段而不是替换以具有正确的后退导航,但是您可以使用以下方式检查Back堆栈计数:

FragmentManager fragmentManager = getSupportFragmentManager();
int count = fragmentManager.getBackStackEntryCount();

,当您希望活动关闭某些片段计数时,您也可以在活动onBackPressed()中直接调用finish()

最新更新