Android 从FragmentTransaction中删除方法';不要从容器中取出碎片

Android 从FragmentTransaction中删除方法';不要从容器中取出碎片,android,android-fragments,Android,Android Fragments,我有以下问题: 我的应用程序需要在平板电脑上执行导航,如下所示: +----+-------+ +----+-------+ +----+-------+ +----+-------+ | | | | | | | | | | | | | 1 | 2 | -> | 2 | 3 | -> | 3 | 4 | -> | 4 | ... |

我有以下问题:

我的应用程序需要在平板电脑上执行导航,如下所示:

+----+-------+    +----+-------+    +----+-------+    +----+-------+
|    |       |    |    |       |    |    |       |    |    |       | 
|  1 |   2   | -> |  2 |  3    | -> | 3  |  4    | -> | 4  |  ...  |
|    |       |    |    |       |    |    |       |    |    |       |
+----+-------+    +----+-------+    +----+-------+    +----+-------+
我尝试使用片段进行导航,因为导航是动态的,我不知道该导航将具有多少级别

使用API片段,我创建了以下结构以协助测试,多次调用同一片段:

如果左侧面板为空,请在其中插入片段。 如果左面板不是空的,右窗格是空的,请在右窗格中插入片段。 如果两个面板不是空的,则移除右侧面板的碎片,并替换左侧面板和。然后将新片段插入右侧

问题是,我在尝试执行replace方法时发现了错误“cannotchangeofcontainerfragment”

查看有关事务的删除方法的文档,了解以下信息: 删除现有片段。如果已将其添加到容器中,则其视图也将从该容器中删除

但是在API代码片段中,仍然有一个变量包含对前一个容器的引用:MFFragmentId


有人知道如何完成此导航或重置此变量吗?

与其将碎片从一个容器移动到另一个容器,不如交换碎片容器的必要布局参数,以实现所需的视觉效果(即,每个容器现在都位于另一个容器的位置)。然后,每次添加一个片段时,也执行这个容器位置交换方法

我想我找到了解决问题的办法:

我将使用一个布局,而不是两个布局

该布局的方向是水平的,那么新的片段将始终添加到左侧

但是,使用以下代码:

Frag1 frag1 = new Frag1();
frag1.setText("Fragment " + Integer.toString(navigation));
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
if (navigation > 2) {
    ft.remove(fm.findFragmentByTag("f" + Integer.toString(navigation - 2)));
}
ft.add(R.id.Panes, frag1, "f" + Integer.toString(navigation));
if (navigation > 1) {
    ft.addToBackStack(null);
}
ft.commit();
我在backback中遇到了一个问题,因为堆栈将插入删除的片段并删除最后一个插入的片段,这与顺序相反

为了解决这个问题,我将事务删除改为隐藏,但我仍然不知道这是否会给我带来性能问题

ft.hide(fm.findFragmentByTag("f" + Integer.toString(navigation - 2)));

它对我很有用。

我试过了,也很有用,但我找到了另一个解决方案,只使用了一个线性布局,对我来说效果更好。谢谢