恢复片段的正确方法是什么?

时间:2014-03-26 14:48:09

标签: android android-fragments android-activity android-lifecycle

首先,如果这个解释不清楚,我很抱歉,我是Android的新手。 我在主要活动中有一个ViewPager,显示用户动态添加的片段。片段最初是在活动启动时创建的,并通过适配器添加到ViewPager,即适配器只返回正确的片段,正如我所理解的那样,当ViewPager第一次“检索”片段时,会创建片段的内容。

问题是当主要活动在方向改变之后恢复所有片段也被复活时,当适配器尝试返回由用户新创建的片段时,不再调用createView()并且它因NullPointerException而失败。似乎ViewPager最初保留了附加到它的片段,并且不为相同位置的新添加片段调用createView()。

我有一种感觉,我错过了片段生命周期的重要观点。我不想改变设计。我的主要问题是在恢复活动后返回添加到ViewPage的片段的正确方法是什么?有没有办法找到最近附加的碎片?

1 个答案:

答案 0 :(得分:3)

如果片段已存在,则会重复使用。但是片段的状态不会。您应该查看http://developer.android.com/training/basics/activity-lifecycle/recreating.html以获取更多信息。

尤其应该考虑覆盖onSavedInstanceStateonRestoreInstanceState作为重新填充生成nullpointerexception的字段的方法

要确定是否已创建片段实例,您可以像这样使用'findFragmentByTag':

String fragmentTag = MyFramgment.getClass().getName();
MyFragment frag = getFragmentManager().findFragmentByTag(fragmentTag);

if(frag == null)
   frag = new MyFragment();

无论最终在'frag'中被引用,都要向用户显示。