你能在onDestroy()中分离一个片段吗?

时间:2012-11-30 04:51:31

标签: android

这是我遇到的问题。我有一个活动A,它有一个片段F,它包含在FragmentPagerAdapter FPA中,在视图V中。(A-> V-> FPA-> F)

当A被销毁时(或者在这种情况下被换出),F被附加,并且在FPA中,在V中。但是,当A被重新创建时(有人点击后退按钮返回到活动中,例如),V和FPA不存在,因此F被重新创建(在附加状态!),但是对于不存在的东西,所以它根本不在视图层次结构中。然后,当FPA尝试在这个片段上实例化State时,它会尝试附加它,它什么都不做,因为它已经附着在空气中了。

显然有一些方法可以解决这个问题(在活动的onCreate中存在V和FPA,以便片段在创建时有某个地方可以去),但是我想继续懒惰仅在需要时创建FPA和V.

因此,似乎在onDestroy()中更新F的状态是可取的。但是,状态保存在onPause()中,这意味着我在这里运气不好。

有没有办法在A的onDestroy()中更新F的保存状态?有没有办法说“如果活动被破坏,不要重新补充这个片段”?还有其他一些明显的思考方式,我不考虑这个吗?感觉我在这里做错了事。

2 个答案:

答案 0 :(得分:1)

我遇到了FragmentPagers的问题。我所做的是在活动onCreate()中传递一个空包,然后在每次创建时从头开始创建所有内容。像这样:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
    // do my stuff
}

这样,在重新创建活动时,片段不会被传递。

答案 1 :(得分:1)

您写道:

  

还有其他一些明显的思考方式,我不考虑这个吗?

这不会直接回答您的标题问题,但提供了一种方便的解决方案,可以解决如何在Fragment中保留ViewPager状态。

您可以通过在初始化Fragment的{​​{1}}中标记Activity来销毁Fragment时隐藏Activity州:

Fragment

另见:

Uses of fragment tags

ViewPager and fragments — what's the right way to store fragment's state?