【问题标题】:Android View Pager Retain View StateAndroid View Pager 保持视图状态
【发布时间】:2015-12-22 18:05:41
【问题描述】:

我使用 android ViewPager 来浏览视图数量。每个视图都有一些 UI 元素,例如 EditText 或 Radio Button。当我在前进几个视图后返回时,我在单选按钮上所做的选择会丢失。

如何实现视图寻呼机以保留我的选择/输入。以下是我声明 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$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)

谢谢。

【问题讨论】:

    标签: android android-viewpager android-pageradapter


    【解决方案1】:

    它与视图寻呼机无关。您只需要添加一些模型类 /sharedPreferences /contentProvider 它将保存您的每个片段的信息并将其加载到 onResume 并保存在 onPause 中。

    对于小型 ViewPager,您可以使用

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

    但我不会为大量页面建议它

    【讨论】:

    • 谢谢。我已经尝试过了,但应用程序崩溃了,请查看更新后的问题
    【解决方案2】:

    您可以设置 ViewPager 的离屏页面限制,然后导航到隐藏的片段时不会重新创建它们。例如,如果您总共有六个选项卡,您可以将屏幕外限制设置为 5。

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

    您必须小心在内存中保留额外片段对性能的影响,但这应该为您指明正确的方向。

    【讨论】:

    • 谢谢。我试过了,但应用程序崩溃了,请查看更新后的问题
    • 这可能是你要找的:stackoverflow.com/questions/22150950/… 标签通常是片段中的片段,所以你必须使用 getChildFragmentManager() 来防止这种递归行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多