java - 布局更改时的 fragment 管理

标签 java android android-fragments fragment

我有一个具有单个 Activity 和两个 fragment 的应用程序。所需的行为是(用户交互以蓝色突出显示):

纵向

enter image description here

横向

enter image description here

我当前的解决方案是:

横向布局

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/

相关文章:

java - 使继承的方法使用子类的变量而不是父类(super class)的变量

java - (Java) Jtable 操作和异常

android - RxJava 1 安卓 : How to create a sequence of timers?

android - 强制开发人员实现 fragment 回调

android - 放置在 NavigationDrawer 顶部的 fragment

java.sql.SQLException : No suitable driver found for localhost/buddhiedgeserver_db 异常

java - 如何使用拆分函数将字符串拆分为 '\'?

java - Realm :使用 beginGroup() 和 endGroup() 进行查询时出现语法错误

android - 如何在marshmallow 及以上android 版本中以编程方式启用移动热点?

Android ActionBarCompat - 具有多个 fragment 的抽屉导航