【发布时间】:2015-04-24 20:27:21
【问题描述】:
我有 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 实例。我从onActivityCreated() 调用此代码,它按预期工作。但是,如果我尝试从onRestart() 再次在我的片段对象上调用此代码,我会崩溃。
发生了什么事?不明白为什么这会对我不利。
非常感谢。
【问题讨论】:
-
您是在活动 onRestart() 中的片段上调用它吗?
-
您是否在活动中的某处第一次使用 FragmentTransaction 来创建片段?您是否尝试过替换您的 onRestart() 代码来替换片段再次?
-
@McAdam331 -- 是的。我有一个 FeedFragment 对象,因此来自 onRestart() 的调用是 feedFragment.refreshUI() 和 feedFragment.getNewContent()。我只是添加了 refreshUI() 来尝试解决我在 getNewContent() 中需要的明显为空的项目的一些问题。我也没有在任何地方使用 FragmentTransactions。当我第一次创建片段时,这一切都来自 onActivityCreated() 和 onViewCreated()。我使用 ViewPager 进行设置的方式不会在任何地方使用 FragmentTransaction。
标签: android android-fragments android-lifecycle