我尝试恢复活动中的当前片段,因为应用有时会在后台被杀死。我使用putFragment()
将当前片段存储在onSaveInstanceState()
中,并使用getFragment()
中的onRestoreInstanceState()
来获取应用程序被杀之前当前片段的已保存实例,这是在托管活动。
MainActivity中的onSaveInstanceState():
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
getSupportFragmentManager().putFragment(outState, "fragment", getSupportFragmentManager()
.findFragmentById(R.id.mainfrag));
super.onSaveInstanceState(outState, outPersistentState);
}
MainActivity()中的onRestoreInstanceState():
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Fragment current = getSupportFragmentManager().getFragment(savedInstanceState, "fragment");
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
if (current instanceof SubCat) {
current = new SubCat();
}
ft.replace(R.id.mainfrag, current); //error-line (MainActivity.java:185)
ft.addToBackStack(null);
ft.commit();
}
我使用SubCat()
片段进行测试,它只是应用的一个片段,所以当SubCat()
片段处于前景/可见时我有意将整个应用放到背景或者让我说我最小化应用程序,一段时间后,当我返回应用程序时,最后一个片段(在这种情况下为SubCat()
)被恢复,但是我也需要保存片段的一些实例同样。
现在的问题是片段重新创建了两次,首先从cat_id
中的包中检索onActivityCreated()
的实际值,但是有些如何再次重新创建片段,此时{未调用{1}}使onActivityCreated()
的值为null。
片段:
cat_id
我不知道我做错了什么,请提前帮助,谢谢。
答案 0 :(得分:0)
最后,我通过删除MainActivity中的onSaveInstanceState()
和onRestoreInstanceState()
来解决这个问题。
恢复fragment
中的activity
并恢复fragment
的状态在某种程度上是多余的,这会使onCreateView()
fragment
两次触发。因此,仅恢复片段状态本身就可以完成工作。