2015-12-22 99 views
1

我使用android ViewPager滑過瀏覽次數。每個視圖都有一些UI元素,如EditText或Radio Button。當我回到幾個觀點後回來時,我在單選按鈕上做出的選擇會丟失。Android View Pager保留視圖狀態

如何實現視圖尋呼機來保留我的選擇/輸入。這裏是我宣佈我的PagerAdapter,

private class QuestionsSlidePagerAdapter extends FragmentStatePagerAdapter { 
     public QuestionsSlidePagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

當我設置上述1setOffscreenPageLimit我又回到這個崩潰日誌,

java.lang.IllegalStateException: Recursive entry to 
executePendingTransactions at 
android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1585) at 
android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570) at 
android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163) at 
android.support.v4.view.ViewPager.populate(ViewPager.java:1106) at android.support.v4.view.ViewPager.populate(ViewPager.java:952) at 
android.support.v4.view.ViewPager.setOffscreenPageLimit(ViewPager.java:733) at 
com.mobytz.handyman.postjob.QuestionsFragment.onActivityCreated(QuestionsFragment.java:116) at 
android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1970) at 
android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1092) at 
android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) at 
android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) at 
android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613) at 
android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) at android.os.Handler.handleCallback(Handler.java:739) at 
android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at 
android.app.ActivityThread.main(ActivityThread.java:6837) at java.lang.reflect.Method.invoke(Native Method) at 
java.lang.reflect.Method.invoke(Method.java:372) at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 

感謝。

回答

1

您可以設置ViewPager的屏幕外頁面限制,然後當您導航到它們時,隱藏片段不會被重新創建。例如,如果你有一個共有六個選項卡,您將設置關屏限制爲5

ViewPager viewPager = (ViewPager)findViewById(R.id.view_pager); 
viewPager.setOffScreenPageLimit(5); 

你必須小心的保持額外的片段內存對性能的影響,但是這應該指向你在正確的方向。

+0

感謝。我試過,但應用程序崩潰,請參閱更新後的問題 – Zach

+0

這可能是你要找的: http://stackoverflow.com/questions/22150950/recursive-entry-to-executependingtransactions 標籤通常片段內的片段,所以你必須使用getChildFragmentManager()來防止這種遞歸行爲。 – TheoKanning

2

它與查看傳呼機無關。您只需添加一些模型類/ sharedPreferences/contentProvider,它將保存每個片段的信息並將其加載到Resume並保存在onPause中。

對於小ViewPagers可以使用

int numberOfPagesOffScreen=2 
    mViewPager = (ViewPager)findViewById(R.id.pager); 
    mViewPager.setOffscreenPageLimit(numberOfPagesOffScreen); 

但我不會認爲它有大量的頁面

+0

謝謝。我嘗試過,但應用程序崩潰,請參閱更新後的問題 – Zach