这就是我遇到的问题。我有一个包含片段F的活动A,它包含在视图V中的FragmentPagerAdapter FPA中(A->V->FPA->F)
当A被销毁(或者在本例中,被换出)时,F被附加,并且在FPA中,而FPA在V中。然而,当A被重新创建时(例如,有人点击返回按钮回到活动中),V和FPA不存在,所以F被重新创建(在附加状态中!),但是到了不存在的东西,所以它根本不在视图层次结构中。然后,当FPA尝试在这个片段上执行instantiateState操作时,它会尝试附着它,但这不会做任何事情,因为它已经附着在稀薄的空气上。
显然有几种方法可以解决这个问题(例如,让V和FPA存在于活动的onCreate中,这样片段在创建时就有了去处),但我想继续懒惰地只在需要时创建FPA和V。
因此,在onDestroy()中将F的状态更新为detached似乎是可取的。但是,状态保存在onPause()中,这意味着我在这里有点不走运。
有没有办法更新A的onDestroy()中保存的F的状态?有没有一种方法可以说“如果活动被破坏了,不要对这个片段进行再水合”?有没有其他一些我没有考虑到的明显的思考方式呢?我觉得我好像走错了路。
发布于 2012-11-30 17:25:22
我和FragmentPagers之间有点麻烦。我所做的是在Activity onCreate()中传递一个空包,然后在每次创建时从头开始创建所有内容。如下所示:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(null);
// do my stuff
}这样,当重新创建活动时,片段将不会被传递。
发布于 2012-11-30 17:59:11
你写道:
有没有其他一些我没有考虑到的明显的思考方式呢?
这并没有直接回答您的标题问题,但为如何在ViewPager中保留Fragment状态提供了一个方便的解决方案。
通过在初始化Fragment的Activity中标记Fragment,可以在销毁Activity时保存Fragment状态
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.photos_pager_activity);
MyImageFragment fragment;
if (savedInstanceState != null) {
fragment = (MyImageFragment) getFragmentManager().findFragmentByTag("my_image_fragment_tag");
} else {
fragment = new MyImageFragment();
getFragmentManager().beginTransaction().add(android.R.id.content, fragment, "my_image_fragment_tag").commit();
}另请参阅:
ViewPager and fragments — what's the right way to store fragment's state?
https://stackoverflow.com/questions/13639214
复制相似问题