碎片,onRestart()和Null指针 - 我做错了什么?

时间:2015-04-24 20:27:22

标签: android android-fragments android-lifecycle

我有3个片段通过ViewPager包含在主要活动中。我想要做的是允许自己在主要活动中的不同生命周期回调中调用这些片段类的对象上的方法,即onRestart(),以便我可以通过后端调用刷新其内容。更具体地说,其中一个片段包含一个"实时馈送"人们发布的图像,用户通过其中一个片段进入此发布活动。

目前,我试图解决的问题是,当用户进入此发布活动并张贴图片时,他们返回的片段中的实时Feed不会刷新。为此,我需要在主要活动onRestart()中调用该片段中的后端和UI更新方法。

但是我遇到了这些空指针异常 - 这里是代码在代码片段中的样子:

  public void refreshUI(){

    activity = getActivity();
    appContext = ThisApp.appContext();
    view = getView();

    peopleHeader = (TextView) view.findViewById(R.id.people_header);
    peopleLinearLayout = (LinearLayout) view.findViewById(R.id.local_people_linearlayout);

    ..... (various other instantiations)... }

NPE来自getActivity()或某些UI实例。我从onActivityCreated()调用此代码,它按预期工作。但是,如果我尝试在onRestart()的片段对象上再次调用此代码,则会崩溃。

发生了什么?无法弄清楚为什么这会对我不利。

非常感谢。

1 个答案:

答案 0 :(得分:2)

当您的Activity被销毁并重新创建时,您的Fragments也会被销毁并重新创建。您可以查看Fragment/Activity生命周期解释here

这意味着您保留的引用会消失,Fragment就在那里,但它是另一个对象。您需要获得对这个新对象的引用。

您可以查看this答案,了解如何操作。它解释了如何获取Fragments适配器创建的ViewPager的引用。