这是我遇到的问题。我有一个活动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的保存状态?有没有办法说“如果活动被破坏,不要重新补充这个片段”?还有其他一些明显的思考方式,我不考虑这个吗?感觉我在这里做错了事。
答案 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
另见:
ViewPager and fragments — what's the right way to store fragment's state?