我有一个具有单个 Activity 和两个 fragment 的应用程序。所需的行为是(用户交互以蓝色突出显示):
纵向
横向
我当前的解决方案是:
横向布局
FrameLayout
ContainerRed(FrameLayout)
ContainerYellow(FrameLayout)
纵向布局
LinearLayout
ContainerRed(FrameLayout weight=1)
ContainerYellow(FrameLayout weight=1)
当用户单击绿色按钮时,我会执行以下事务:
- 纵向:删除 FragmentA,将 FragmentB 添加到 containerYellow,addToBackstack
- 横向:将 FragmentB 添加到 contanerYellow,addToBackstack
这实现了正确的行为,除非您在事务后旋转设备,例如,如果您处于纵向,则转到屏幕 B1,然后旋转设备以横向,FragmentA 插槽为空。
此外,如果您位于屏幕 B2 中并将屏幕旋转为纵向,则 FragmentA 会出现在 FragmentB 的背景中。
我该如何解决这个问题?谢谢
最佳答案
我有一个有效的解决方案:
首先对 addToBackstack("FOO") 使用相同的标签;
在Activity的onCreate方法最后调用:
Fragment fragmentB=getFragmentManager().findFragmentByTag("FRAGMENT_B_TAG");
if (fragmentB!=null){
getFragmentManager().popBackStackImmediate("FOO",
FragmentManager.POP_BACK_STACK_INCLUSIVE);
attachFragmentB(fragmentB);
}
void attachFragmentB(Fragment fragmentB){
//In portrait: Remove FragmentA, add FragmentB to containerYellow, addToBackstack("FOO")
//In landscape: add FragmentB to contanerYellow, addToBackstack("FOO")
}
关于java - 布局更改时的 fragment 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24536524/