我遵循了 FragmentTabsPager 的 ABS 示例,但我遇到了这个问题:
- Activity A 有两个片段:F1、F2,它们是使用 TabsAdapter 在 A 的 onCreate() 方法中添加的。
- Activity A 可以选择根据 http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity刷新片段
- 活动 A 可以选择启动活动 B,它将项目添加到 F1(因此需要更新 F1)
但是,在完成 B 之后,碎片不再附加到 A 上。经过一番调试,我发现 A 的 onCreate() 方法在完成 B 后调用了包含此条目的 savedInstanceState:
android:support:fragments=android.support.v4.app.FragmentManagerState$41bfffe0
我的理解是 FragmentActivity 在启动 B 之前保存了片段,在重新启动 A 之后,它会尝试恢复它们。稍微追查发现,在完成 B 之后,这些动作被称为:
Activity A: constructor called
Fragment F1: constructor called
Fragment F2: constructor called
Fragment F1: onAttach
Fragment F1: onCreate
Fragment F2: onAttach
Fragment F2: onCreate
Activity A: onCreate
Activity A: TabsAdapter created
TabsAdapter: addTab android.widget.TabHost$TabSpec@41d949f8
Fragment F1: constructor called
TabsAdapter: addTab android.widget.TabHost$TabSpec@41d965d0
Fragment F2: constructor called
Fragment F1: onActivityCreated
Fragment F1: onCreateLoader
Fragment F2: onActivityCreated
Fragment F2: onCreateLoader
Activity A: onStart
Fragment F1: onResume
Fragment F1: onCreateLoader
Fragment F2: onResume
Fragment F2: onCreateLoader
Activity B: onStop
Fragment F1: onLoadFinished
Fragment F2: onLoadFinished
每个片段有 2 个实例,显示的片段不附加到活动。
我该如何解决这个问题?我究竟做错了什么?也许如果有办法获得恢复的碎片?
提前致谢