1

我正在努力解决一个Activity > ViewPager > Fragments完全被完全破坏和重新创建的问题,我正在处理这种情况,比如当屏幕orientation改变时我只是restoredata保存的instance状态中恢复过来,但是当我的设备空闲一段时间并且屏幕off又一次ON又一次,保存data在里面的instance是存在destroyed和它的空值。
代码示例:

基础片段

@Override public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Icepick.saveInstanceState(this, outState);
}

 @Override public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    Icepick.restoreInstanceState(this, savedInstanceState);
    setRetainInstance(true);
}

活动

    mAdapter = new BrochureContentAdapter(getSupportFragmentManager(), models);
    pager.setAdapter(mAdapter);
    pager.setCurrentItem(position, true);
    pager.setOffscreenPageLimit(models.size());

当屏幕旋转(重新创建)时, BaseFragment句柄保存和恢复一切顺利,我唯一的问题是,如果屏幕一会再回来,保存的实例将被完全破坏。instanceIcePickfragmentBaseFragmentidleON

以前有人遇到过类似的问题并找到解决方法吗?

4

3 回答 3

1

真正为我解决问题的只是移动一些东西

Icepick.restoreInstanceState(this, savedInstanceState);

onActivityCreated每次我从屏幕出来时都会在其中调用它,我OFFbundle数据正在被清除,为了解决这个问题,我的saving/restoring订单如下:

@Override public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Icepick.saveInstanceState(this, outState);
}

@Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    if (savedInstanceState != null && !savedInstanceState.isEmpty()) {
        Icepick.restoreInstanceState(this, savedInstanceState);
    }
}

@Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}

来回移动Icepick.restoreInstanceState(this, savedInstanceState);以解决问题。onActivityCreated_ 我希望它在未来对某人有所帮助。 onViewCreatedsetRetainInstanceonActivityCreatedonCreate

于 2015-11-24T04:16:03.623 回答
0

您的活动可能正在破坏 FragmentManager 的实例,这意味着您的 Fragment(以及它在 savedInstanceState 中的数据)可能会被破坏。在此处查看此答案:https ://stackoverflow.com/a/22914015/1738090

您是否尝试过从您的活动中额外恢复片段onStart()onResume()查看是否有效?

于 2015-11-24T02:52:30.063 回答
0

也许你的片段没有完全被破坏,只有它的观点是。检查是否onDestroyView为片段调用,如果是,则在OnActivityCreated.

于 2015-11-24T03:01:16.083 回答