2011-09-16 63 views
6

可能重复:
Separate Back Stack for each tab in Android using FragmentsAndroid的碎片查看状态的标签主机内

我最近开始了FragmentActivity内的一个标签主机内部片段的应用程序的工作。该由于TabActivity类现在已被弃用,因此Android文档说要做到这一点。为了使用片段,我使用了android v4支持库。

目前我的应用程序由一个片段存在的片段组成。导航到新的片段我一直在使用下面的代码(这似乎基于文档是正确的)选项卡中:

FragmentTransaction ft = fragmentManager.beginTransaction(); 
ft.replace(containerId, newFragment); 
ft.addToBackStack(null); 
ft.commit(); 

一切都很好,好,直到我打的返回键导航到以前的片断,并意识到我的所有视图状态已经被破坏了......发生的事情是,onCreateView()方法在我之前的片段上再次被调用,即使其视图先前已经被创建......为什么会这样呢?我已经搜索了如何正确地维护片段状态,但我似乎无法找到像这样的体面文件。

我再尝试是使用

ft.add(containerId, newFragment); 

代替

ft.replace(containerId, newFragment); 

这实际上做得很不错的,我的视图状态保留 - onCreateView()每次不叫我以前的片段被显示。然而,我后来注意到,即使我看不到这些组件,我仍然可以与位于当前片段下面的以前片断的组件(按钮等)进行交互。我读的地方,下面的方法应该是用来保存一些状态:

public void onSaveInstanceState (Bundle outState) 

我实现了这个方法,但是,这是从来没有叫!我也注意到过去的onCreateView()和onActivityCreated()方法的bundle总是空的。当然,谷歌还没有使这种事情变得如此困难,我必须错过一些东西?任何关于如何正确维护片段的视图状态的帮助将不胜感激!

谢谢。

+0

其他人都遇到过吗?请帮忙! :) –

+0

好吧,所以当简单地在片段之间导航时,看起来状态问题并不是问题,而是当涉及另一个活动时...请查看我已记录的错误(问题20120):http://代码。 google.com/p/android/issues/detail?id=20120 –

回答