繁体   English   中英

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

[英]Android - How to restore state of ViewPager's items

我在ViewPager恢复View状态时遇到了麻烦。 ViewPager的内容是一个扩展FrameLayout的视图。

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

这是我的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);
}

MainPagerAdapter这个问题的接受答案中的一个类

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不属于任何人

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM