我在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?
答案 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();