簡體   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