[英]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");
}
到目前为止,这是我的发现:
onSaveInstanceState()
但不会调用onRestoreInstanceState()
ViewPager
调用适配器的instantiateItem()
函数之前,将调用Activity的onRestoreState函数。 因此,当活动恢复其状态时, ViewPager
还没有任何子项,因此savedState不属于任何人 所以我发现我需要做两件事之一:
ViewPager
实例化该项,或 onRestoreInstanceState()
。 我以某种方式设法制作了2号选项,但有没有办法做第1号选项?
如果我理解了您的问题,您可以使用mPage.setOffscreenPageLimit(4);
保存您的ViewPager项状态mPage.setOffscreenPageLimit(4);
4是ViewPager中我的Fragments的数量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.