Android - 如何恢复ViewPager项目的状态

Ahm*_*dli 7 java android

我在恢复View内部状态方面遇到了麻烦ViewPager.该内容ViewPager是一个视图扩展FrameLayout.

问题是FrameLayout.onRestoreInstanceState()如果以编程方式添加到中,则不会被调用ViewPager

这是我的代码 Activity.java

private ViewPager vPager;
private MainPagerAdapter mAdapter;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    setContentView(R.layout.activity_layout);
    // all the findViewById stuff

    CustomView cv1 = new CustomView(this);
    CustomView cv2 = new CustomView(this);

    cv1.setId(R.id.custom_view_id_1);
    cv2.setId(R.id.custom_view_id_2);

    mAdapter = MainPagerAdapter();
    mAdapter.addView(cv1);
    mAdapter.addView(cv2);
    vPager.setAdapter(mAdapter);
}
Run Code Online (Sandbox Code Playgroud)

MainPagerAdapter是一个来自这个问题的接受答案的课程

的源代码 CustomView.java

@Override
protected Parcelable onSaveInstanceState() {
    Log.d(TAG, "onSaveInstanceState() called");
}

@Override
protected void onRestoreInstanceState(Parcelable state) {
    Log.d(TAG, "onRestoreInstanceState() called");
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我的发现:

  1. onSaveInstanceState()将被召唤但onRestoreInstanceState()不是
  2. 当我尝试将View直接添加到Activity的根目录时,它会调用这两个函数.
  3. 我发现在ViewPager调用适配器的instantiateItem()函数之前将调用Activity的onRestoreState 函数.因此,当活动恢复其状态时,ViewPager还没有任何子项,因此savedState不属于任何人

所以我发现我需要做两件事之一:

  1. 确保ViewPager在尝试恢复状态之前实例化项目,或
  2. onRestoreInstanceState()手动调用CustomView .

我以某种方式设法制作了2号选项,但有没有办法做第1号选项?

Hay*_*yan -1

如果我理解你的问题,你可以使用 4 来保存你的 ViewPager 项目状态,mPage.setOffscreenPageLimit(4);4 是我在 ViewPager 中的片段数量。