我有一个活动,其中一个容器将接收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()
。