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