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)));
它对我很有用。我试过了,也很有用,但我找到了另一个解决方案,只使用了一个线性布局,对我来说效果更好。谢谢