这是我希望我的应用程序在平板电脑上执行的操作。片段 (0) 有一些菜单可以显示片段 (1)...(n),如下所示:
-----------------
| | | | |
| | | | |
|(0)| X | X | X |
| | | | |
| | | | |
-----------------
becomes
-----------------
| | | | |
| | | | |
|(0)|(1)| X | X |
| | | | |
| | | | |
-----------------
and then
-----------------
| | | | |
| | | | |
|(0)|(2)|(1)| X |
| | | | |
| | | | |
-----------------
etc...
Fragment0 从不移动,其他的都向右移动。离开右侧边缘的碎片将被销毁。
因此,我使用水平 LinearLayout 设置了我的 XML 布局,并包含 4 个具有正确 ID 的 FrameLayout(fragment0...fragment3)
我可以实例化并显示fragment0,然后显示fragment1,但之后我无法将其向右移动,我得到:
ERROR/AndroidRuntime(343): FATAL EXCEPTION: main
java.lang.IllegalStateException: Can't change container ID of fragment ...
我发现的唯一相关问题是这个和那个,尝试了所有不同的解决方案,但没有运气。
尝试,FragmentTransaction.remove()
然后.add()
尝试.replace()
,以不同的顺序尝试它们并在中途提交(甚至尝试按照某人的建议提交两次),尝试调用addToBackStack()
......仍然没有运气。
问题是是否可以像这样使用 FragmentTransaction 移动片段。如果是的话,我做错了什么(还有奖金,是否可以制作动画?)。如果不是,那么实现这一点的正确方法是什么?
请注意,我不想每次都重新实例化片段(每个片段都会在网络上进行一些可能需要一些时间的查询)。可以将所有数据提取回活动以重新创建一个,但如果可能的话,我宁愿不这样做......