【问题标题】:FragmentStatePagerAdapter fails to load the fragments again when I get back to old instance of the parent Fragment当我回到父片段的旧实例时,FragmentStatePagerAdapter 无法再次加载片段
【发布时间】:2013-12-15 15:50:39
【问题描述】:

场景:

我有一个片段,它有一个 ViewPager,其中包含具有不同值的单个片段的 5 个实例(不同),每个片段都有一个包含某种项目的列表。

问题:

当我单击 listView 的一个项目(例如在 page1 上)时,流程变得顺利,但是当我从那里返回按回时(在 main_activity 中覆盖 OnBackPressed(稍后将讨论)),viewPager 无法加载 subFragments .

但是当我切换到第 2 或第 3 页时,它会显示出来,而在返回到第 1 页时,它现在会显示出来。

OnBackPressed():

我在这里维护一个手动堆栈。当我单击 ListView 的一项时,当前的 Fragment 实例(当然是父 Fragment 的)进入堆栈。当用户返回时,该实例会从堆栈中弹出,我将其替换为活动 FrameLayout 容器。

参考资料:

Fragments not getting recreated by FragmentStatePagerAdapter after coming back to the main Fragment instance

伙计们,我真的很生气,请帮帮我。

【问题讨论】:

    标签: android android-fragments android-fragmentactivity fragmentstatepageradapter


    【解决方案1】:

    坦率地说,我对片段的工作并不多。 但是,每次切换到其他页面时,该页面似乎都会被抛出内存。我不确定,但如果 android 有办法管理这个并将页面永久保存在内存中,它可能会解决问题

    【讨论】:

      【解决方案2】:

      最后我能够找到解决此问题的方法,其中包括两件事:

      1. 在替换片段时调用

        ft.replace(R.id.content_frame, frag).addToBackStack(null);
        
      2. 在启动 ViewPager 时,要使用的片段管理器是:

        mAdapter = new myAdapter(getChildFragmentManager());

      实际上的问题是,除非您明确地将那个实例添加到后台堆栈,否则 android 无法识别和加载片段的旧实例。所以添加到 BackStack 后,几乎不需要维护自己的手动 Stack,但您仍然可以这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多