Android 碎片、onRestart()和空指针——我做错了什么?

Android 碎片、onRestart()和空指针——我做错了什么?,android,android-fragments,android-lifecycle,Android,Android Fragments,Android Lifecycle,我有3个片段,它们通过ViewPager包含在主活动中。我试图做的是允许自己从主活动中的不同生命周期回调调用这些片段类的对象上的方法,即onRestart(),这样我就可以通过后端调用刷新它们的内容。更具体地说,其中一个片段包含人们正在发布的图像的“实时提要”,用户可以通过其中一个片段访问此发布活动 现在,我试图解决的问题是,当用户进入这个发布活动并上传图片时,他们返回的片段中的实时提要不会得到刷新。为此,我需要从主活动的onRestart()调用该片段中的后端和UI更新方法 但我遇到了这些空指

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

现在,我试图解决的问题是,当用户进入这个发布活动并上传图片时,他们返回的片段中的实时提要不会得到刷新。为此,我需要从主活动的
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实例。我从activitycreated()调用这段代码,它可以按预期工作。但是,如果我尝试从
onRestart()
对片段对象再次调用此代码,则会崩溃

发生了什么事?我不明白为什么这会对我不利


非常感谢。

当您的
活动被销毁并重新创建时,您的
片段也会随之销毁并重新创建。您可以查看
片段/活动
生命周期说明

这意味着,您保留的引用消失了,
片段在那里,但它是另一个对象。您需要获取此新对象的引用


你们可以检查一下如何做的答案。它解释了如何获取对
ViewPager
适配器创建的
片段的引用。

您在activities onRestart()中的片段上调用它?您是否在activity中的某个位置使用FragmentTransaction首次创建片段?您是否尝试过替换onRestart()代码以再次替换片段?@McAdam331--是的。我有一个FeedFragment对象,因此来自onRestart()的调用是FeedFragment.refreshUI()和FeedFragment.getNewContent()。我添加refreshUI()只是为了解决getNewContent()中所需的一些明显为空的项的问题。我也没有在任何地方使用碎片事务。当我第一次创建片段时,它都是从onActivityCreated()和onViewCreated()开始的。我用ViewPager设置东西的方式在任何地方都不使用FragmentTransaction。