2015-12-22 55 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