按顺序从后退栈中获取所有片段

4
我在我的应用程序项目中使用片段(Fragments)。所有的片段都会添加到返回栈(back stack)中:
...
fragmentTransaction.addToBackStack(null);
...

后来,正确的方法是如何按顺序从返回栈获取所有片段?
1个回答

4
使用getBackStackEntryCount(),您可以遍历返回堆栈,并使用getBackStackEntryAt()方法获取每个片段。
编辑: 根据评论中的一些讨论,建议您手动存储添加到后退堆栈中的片段列表,并将其持久化到SharedPreferences中。然后,当应用程序启动时,您可以读取此列表并重新加载这些片段。

3
当调用getBackStackEntryAt()时,我得到了"BackStackEntry",但我需要获取碎片(fragment),我需要在返回栈中获取碎片。 - Leem.fin
抱歉,看起来您无法使用这些方法。您需要手动保留自己的引用,尽管 BackStackEntry 的文档确实指出您不应该持有这些引用。 http://developer.android.com/reference/android/app/FragmentManager.BackStackEntry.html - Mimminito
我可以问一下你想要实现什么吗?也许有更好的解决方案。 - Mimminito
当服务器响应不正确时,我的应用程序将被终止。如果用户再次启动应用程序,则我的应用程序应显示先前显示的片段,因此我的应用程序需要在本地保留片段后退栈信息,我需要按顺序从后退栈中获取片段。 - Leem.fin
1
你应该手动存储当前打开的所有片段的列表。如果你知道应用程序何时将被杀死,那么你就可以将列表持久化到SharedPreferences中,然后在应用程序再次启动时检索它们。每当你添加或删除一些内容到后退栈时,请确保将引用添加到你的列表中。为了使它更简单,有一个常量类分配给每个片段一个ID(类型为int),然后你将能够交叉引用你已经加载的Fragment是哪一个。 - Mimminito
好的,因为我的每个片段都有一个标签,所以我打算使用List来存储每次将片段放入堆栈时的标签。然后将列表持久化在SharePreferences中。你能给出一个答案吗?我可以接受它。 - Leem.fin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接