activity 恢复后对新副本的 Viewpager 片段引用

Viewpager fragment reference to new copy after activity restore

当我的包含viewpager的activity在后台被系统杀死然后恢复状态时,fragments被正确创建并且viewpager adapter可以也正确指向它们。 但是当我得到一个 fragment 引用并尝试访问它的字段时,它们都是 null (使用断点检查)。 我通过在片段 onCreateView() 和我的 activity 按钮的 clickListener.

中放置断点来检查这一点
((WelcomeFragment)homeActivityFragmentPageAdapter.getItem(POSITION_HOME)).setdata(myData);

现在此方法将通过 null pointer 异常,因为 setdata(data) 正在内部访问 fragmentarraylist 字段。

这给我带来了一个问题,因为我的 activity 必须通过调用其 public 方法(如文档所建议的那样)不断地将网络数据提供给 fragment

状态恢复后如何保证;我的 activity.

中指出了正确的实例

尝试使用 instantiateItem 适配器方法 getItem

((WelcomeFragment)homeActivityFragmentPageAdapter.instantiateItem(mViewPager, POSITION_HOME)).setdata(myData);

方法getItem是重写的方法,通常用于创建子片段。

编辑:

如果是问题场景,还需要手动存储FragmentStatePagerAdapter的状态:

@Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
      savedInstanceState
        .putParcelable("pages",homeActivityFragmentPageAdapter.saveState());
      super.onSaveInstanceState(savedInstanceState);
    }

然后你可以在oncreate中获取状态:

@Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         if (savedInstanceState != null) {
            homeActivityFragmentPageAdapter.restoreState(savedInstanceState.getParcelable("pages"),this.getClassLoader());
            welcomeFragment = (WelcomeFragment) homeActivityFragmentPageAdapter.instantiateItem(mViewPager, POSITION_HOME);

        }
        else { //simply create a new instance here}

        homeActivityFragmentPageAdapter.addFragmentToAdapter(welcomeFragment);
        homeActivityFragmentPageAdapter.notifyDataSetChanged();
    }