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

时间:2016-02-17 15:59:56

标签: 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);
}

MainPagerAdapterthis question

接受答案中的一个类

CustomView.java

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

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

到目前为止,我的调查结果如下:

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

    1. 确保ViewPager在尝试恢复状态之前实例化该项目,或
    2. 手动调用CustomView' onRestoreInstanceState()
    3. 我设法制作了第2号选项,但有没有办法做第1号选项?

1 个答案:

答案 0 :(得分:-1)

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