Android中的片段addToBackStack

时间:2015-07-04 04:34:09

标签: android fragment

假设我有一项活动,视图中有两个占位符:

<RelativeLayout>
    <RelativeLayout id="fg_1" ...>
    <RelativeLayout id="fg_2  ...>
</RelativeLayout>

现在一旦发生了什么事,我将通过这些代码在视图中添加一个片段:

private void showFragment(Fragment fragment, int id) {
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(id, fragment);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

例如,当我触发动作1时,Fragment1将显示,当触发action2 Fragment2将显示时。

现在当我点击后面的菜单时,在我看来,Fragment2将会消失,当我再次单击后退菜单时,Fragment1将会消失,一旦我再次单击后退菜单,应用程序就会退出。

然而即使我单击后退菜单,应用程序也会退出,addToBackStack似乎无法正常工作。

我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

我想说你必须换成相同的容器。

这里你已经将2个相对布局作为容器。

<RelativeLayout>
    <RelativeLayout id="fg_1" ...>
    <RelativeLayout id="fg_2  ...>
</RelativeLayout>

应该是什么样的

<RelativeLayout>
    <RelativeLayout id="fg_1" ...>
</RelativeLayout>

将片段替换为1个相对布局( fg_1 )容器。

如果有任何问题,请告诉我。

希望它会对你有所帮助。

修改

确保使用相同的FragmentManager,相同的片段。意味着我在2个月之前遇到了同样的问题,我在一个类中使用了 android.app.FragmentManager 而且 android.support.v4.app.FragmentManager < / strong>在其他类中。

可能会帮助你。

答案 1 :(得分:0)

从代码中删除addBackStack(null)方法。点击后退后按退出应用程序。

private void showFragment(Fragment fragment, int id) 
{
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(id, fragment);
fragmentTransaction.commit();
}