单击返回时会显示两个片段

时间:2015-01-12 08:46:52

标签: android android-fragments

我在xml文件中有一个主容器,我将根据按钮点击替换碎片。

当Activity打开时,我将使用以下代码

将fragment1添加到主容器中
    fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.container, homeMainFragment);
    fragmentTransaction.commit();
在HomeMainFragment中单击一个按钮执行以下操作

   Fragment2 fragment2 = new Fragment2 ();
   fragmentTranasaction.replace(R.id.container, fragment2);
   fragmentTranasaction.addToBackStack(null);
   fragmentTranasaction.commit();
单击另一个按钮,使用以下代码移动到Fragment3,在Fragment2中

   FragmentTransaction transaction = fragmentManager.beginTransaction();
   Fragment3 fragment3  = new Fragment3 ();
   transaction.replace(R.id.container, fragment3 );
   transaction.commit();

现在当我点击我的UI时,应显示HomeFragment,而不是显示home以及fragment3合并在一起。

只是想明确我的要求 1.当我查看fragment3并点击后面时,我应该看到homefragment而不是fragment2 2.我没有将fragment3添加到backstack中,因为fragment3中的一个按钮再次启动fragment2,它将启动fragment3。 (在这种情况下使用上面显示的相同代码)如果我点击后面我可以看到我不需要的片段3的多个实例。请帮助解决这个问题。

编辑2:

这些是我的观察 在第1步:容器有homefragment.xml
在步骤2中:容器由fragment1..xml替换 在步骤3中:容器由fragment3.xml替换 当我点击后面的容器正在添加homefragment,这是transaparent背景,这就是为什么片段3.is仍然可见。
有什么方法当用户点击后删除backstack并单独添加homefragment?

2 个答案:

答案 0 :(得分:0)

我认为这是你必须要做的。

fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.container, homeMainFragment);
fragmentTransaction.commit();
在HomeMainFragment中单击一个按钮执行以下操作

Fragment2 fragment2 = new Fragment2 ();
fragmentTranasaction.replace(R.id.container, fragment2);
fragmentTranasaction.addToBackStack().commit();
单击另一个按钮,使用以下代码移动到Fragment3,在Fragment2中

FragmentTransaction transaction = fragmentManager.beginTransaction();
Fragment3 fragment3  = new Fragment3 ();
transaction.replace(R.id.container, fragment3 );
transaction..addToBackStack().commit();

请参阅以下链接以获取更多信息。

http://developer.android.com/training/implementing-navigation/temporal.html#back-fragments

根据文件, 当后端堆栈上有FragmentTransaction对象并且用户按下Back按钮时,FragmentManager会从后端堆栈弹出最近的事务并执行相反的操作(例如,如果事务添加了片段,则删除片段)。

希望这有帮助。

答案 1 :(得分:0)

您可以尝试:

getFragmentManager().popBackStack();