我有一个活动包含一个容器,它将接收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(这是正确的),当我再次按下后退按钮时,它显示空屏幕(但保持相同的活动)。我希望它只关闭应用程序(因为活动没有父项)。
有许多与Fragments和backstack相关的帖子,但我找不到一个简单的解决方案。我想避免这种情况,我必须检查我是否在片段A或片段B上按下,因为我可能会扩展片段的数量,我将需要维护该方法。
答案 0 :(得分:0)
addToBackStack(fragment.getTag())
仅用于片段B,不用于片段A
答案 1 :(得分:0)
我认为您的片段A没有正确弹出,尝试使用添加片段而不是替换以获得正确的后退导航,但是您可以使用以下方法检查后台堆栈的数量:
FragmentManager fragmentManager = getSupportFragmentManager();
int count = fragmentManager.getBackStackEntryCount();
如果您希望自己的活动在某些片段数量上关闭,您也可以直接致电活动finish()
中的onBackPressed()
。
答案 2 :(得分:0)
您收到空白屏幕,因为当您添加第一个片段时,您将calling addToBackStack()
,因为您在不知不觉中添加了空白屏幕!
现在您可以在onBackPressed()
中调用以下方法,您的问题将得到解决
public void moveBack()
{
//FM=fragment manager
if (FM != null && FM.getBackStackEntryCount() > 1)
{
FM.popBackStack();
}else {
finish();
}
}
请勿在ONBACKPRESSED();
中调用超级只需调用上面的方法!