2

设想:

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

问题:

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

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

OnBackPressed():

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

参考:

回到主 Fragment 实例后,FragmentStatePagerAdapter 没有重新创建 Fragment

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

4

2 回答 2

2

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

于 2013-12-19T17:41:31.397 回答
1

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

  1. 在替换片段时调用

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

    mAdapter = new myAdapter(getChildFragmentManager());

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

于 2014-08-01T06:33:41.163 回答