[英]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.