Android 查看寻呼机保留视图状态
Android View Pager Retain View State
我正在使用 android ViewPager 滑动查看次数。每个视图都有一些 UI 元素,例如 EditText 或 Radio Button。当我前进几次后返回时,我在单选按钮上所做的选择丢失了。
如何实现视图寻呼机以保留我的 selections/inputs。这是我声明我的 PagerAdapter 的方式,
private class QuestionsSlidePagerAdapter extends FragmentStatePagerAdapter {
public QuestionsSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
当我将 setOffscreenPageLimit 设置为高于 1 时,我正在取回此崩溃日志,
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.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)
谢谢。
您可以设置 ViewPager 的离屏页面限制,这样当您导航到隐藏的片段时就不会重新创建它们。例如,如果您总共有六个选项卡,则可以将屏幕外限制设置为 5。
ViewPager viewPager = (ViewPager)findViewById(R.id.view_pager);
viewPager.setOffScreenPageLimit(5);
您必须注意在内存中保留额外片段对性能的影响,但这应该为您指明正确的方向。
它与查看寻呼机无关。您只需要添加一些模型 class /sharedPreferences /contentProvider ,它将保存每个片段的信息并加载它 onResume 并保存在 onPause 中。
对于小型 ViewPagers,您可以使用
int numberOfPagesOffScreen=2
mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(numberOfPagesOffScreen);
但我不会建议它用于大量页面
我正在使用 android ViewPager 滑动查看次数。每个视图都有一些 UI 元素,例如 EditText 或 Radio Button。当我前进几次后返回时,我在单选按钮上所做的选择丢失了。
如何实现视图寻呼机以保留我的 selections/inputs。这是我声明我的 PagerAdapter 的方式,
private class QuestionsSlidePagerAdapter extends FragmentStatePagerAdapter {
public QuestionsSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
当我将 setOffscreenPageLimit 设置为高于 1 时,我正在取回此崩溃日志,
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.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)
谢谢。
您可以设置 ViewPager 的离屏页面限制,这样当您导航到隐藏的片段时就不会重新创建它们。例如,如果您总共有六个选项卡,则可以将屏幕外限制设置为 5。
ViewPager viewPager = (ViewPager)findViewById(R.id.view_pager);
viewPager.setOffScreenPageLimit(5);
您必须注意在内存中保留额外片段对性能的影响,但这应该为您指明正确的方向。
它与查看寻呼机无关。您只需要添加一些模型 class /sharedPreferences /contentProvider ,它将保存每个片段的信息并加载它 onResume 并保存在 onPause 中。
对于小型 ViewPagers,您可以使用
int numberOfPagesOffScreen=2
mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(numberOfPagesOffScreen);
但我不会建议它用于大量页面