我已经关注了FragmentTabsPager的ABS示例,但我遇到了这个问题:
然而,在完成B之后,碎片不再附着在A.经过一些调试后,我发现在使用包含此条目的savedInstanceState完成B后调用A的onCreate()方法:
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个实例,显示片段不附加到活动。
我该如何解决这个问题?我究竟做错了什么?也许如果有办法如何获得恢复的碎片?
提前致谢
答案 0 :(得分:0)
如果我正确理解这一点,我建议这就是:
Fragment
的F1和F2位于Activity
A,Activity
B 不应与Fragment
创建或尝试互动 。 Activity
使用startActivityForResult
开始Activity
B,让B将项目(要添加到Fragment
F1)传回A。Activity
A应该使用Fragment
处理将新项目发送到interface
F1(就像您已经完成的那样)。interface
A收到新项目(使用Activity
方法)后,Fragment
F1应该更新其数据并刷新其View
。需要注意的另一点是,确保您的Activity
A仅在Fragment
中添加onCreate
一次,它可以使用savedInstanceState
来了解它是否正在重新创建或者如果它是它的第一次创造。请参阅http://developer.android.com/training/basics/fragments/fragment-ui.html。
啊,现在我看到更多你在问什么了。你有几种方法可以去这里。
FragmentManager
和标记技巧从Fragment
中获取ViewPager
,然后根据需要进行更新。
Fragment
的{{1}},并且需要在与之互动之前进行检查。onResume
中,您的onResume
将需要检查并更新其数据,以防其被更改。Fragment
已经在Activity
,则interface
还需要通过Fragment
方法向他们提供刷新信号。onResume
中的Loader
来监控数据集,并通过Fragment
回调让Fragment
的用户界面自动更新。