gpt4 book ai didi

android - 从 FragmentTransaction 中移除方法不会从 Container 中移除 fragment

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:18 24 4
gpt4 key购买 nike

我有以下问题:

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

+----+-------+    +----+-------+    +----+-------+    +----+-------+
| | | | | | | | | | | |
| 1 | 2 | -> | 2 | 3 | -> | 3 | 4 | -> | 4 | ... |
| | | | | | | | | | | |
+----+-------+ +----+-------+ +----+-------+ +----+-------+

我尝试使用 FRAGMENTS 制作这个导航,因为导航是动态的,我不知道这个导航会有多少层。

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

如果左侧面板为空,则将 fragment 插入其中。如果左面板不为空且右面板为空,则将 fragment 插入右面板。如果这两个面板不为空,则删除右面板的 fragment 并用左面板替换它。然后向右插入新 fragment 。

问题是当我尝试执行替换方法时发现错误“无法更改容器 fragment 的 ID”。

查看事务的 Remove 方法的文档有以下信息:“删除现有 fragment 。如果它被添加到容器中,它的 View 也会从该容器中删除。”

但查看API代码 fragment ,仍然有一个变量包含对前一个Container的引用:mFragmentId。

有谁知道完成此导航或重置此变量的方法吗?

最佳答案

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

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

此布局的方向是水平的,那么新的 Fragments 将始终添加到左侧。

但是,使用下面的代码:

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();

我在 BackStack 中遇到问题,因为堆栈将插入删除的 Fragment 并删除最后插入的 Fragment,颠倒顺序。

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

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

它对我有用。

关于android - 从 FragmentTransaction 中移除方法不会从 Container 中移除 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9788093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com