Android 方向更改时碎片视图为空
在将我的应用程序从普通活动样式移植到片段样式时,我遇到了一些问题。我开始注意到,当一个片段被重新创建,或者从后台弹出时,它会丢失它的视图。当我这么说的时候,我指的是一个列表视图。我所做的是将项目加载到listview中,然后旋转屏幕。当它返回时,会得到一个nullpointerexception。我调试了它,确信listview是空的。下面是片段的相关代码Android 方向更改时碎片视图为空,android,view,android-fragments,Android,View,Android Fragments,在将我的应用程序从普通活动样式移植到片段样式时,我遇到了一些问题。我开始注意到,当一个片段被重新创建,或者从后台弹出时,它会丢失它的视图。当我这么说的时候,我指的是一个列表视图。我所做的是将项目加载到listview中,然后旋转屏幕。当它返回时,会得到一个nullpointerexception。我调试了它,确信listview是空的。下面是片段的相关代码 @Override public View onCreateView(LayoutInflater inflater, ViewGr
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle savedInstanceState) {
return inflater.inflate(R.layout.sg_question_frag, viewGroup, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
list = (ListView)getActivity().findViewById(R.id.sgQuestionsList);
if (savedInstanceState != null) {
catId = savedInstanceState.getInt("catId");
catTitle = savedInstanceState.getString("catTitle");
}
populateList(catId, catTitle);
}
下面是它的名称(请记住,我也在处理一些其他片段)
我最终想要它做的是完全重新创建活动,忘记片段和一切,就像活动是在横向模式或纵向模式下启动的一样。我真的不需要那里的片段,我可以使用一些保存的变量以编程方式重新创建它们如果您想从
片段中获取对视图的引用
请始终在getView()
方法返回的视图中查找该视图
。在您的情况下,在查找列表视图时,片段的视图可能尚未附加到活动,因此引用将为空。因此,您使用:
list = (ListView) getView().findViewById(R.id.sgQuestionsList);
如果要从片段中获取对视图的引用,请始终在getView()
方法返回的视图中查找该视图。在您的情况下,在查找列表视图时,片段的视图可能尚未附加到活动,因此引用将为空。因此,您使用:
list = (ListView) getView().findViewById(R.id.sgQuestionsList);
如果列表位于onCreateView
方法的扩展布局中,则不应在活动中查找ListView
。使用getView().findViewById…
。我不是在活动中查找listview,而是在onActivityCreated方法的片段中查找它。我不知道这是否是您的意思,但我将getActivity().findViewById更改为getView().findViewById,它工作起来很有魅力,谢谢。如果您将其作为答案发布,我将接受。如果列表位于onCreateView
方法中的膨胀布局中,则不应在活动中查找ListView
。使用getView().findViewById…
。我不是在活动中查找listview,而是在onActivityCreated方法的片段中查找它。我不知道这是否是您的意思,但我将getActivity().findViewById更改为getView().findViewById,它工作起来很有魅力,谢谢。如果你把它作为答案贴出来,我会接受的你刚刚救了我一个早上!你刚刚救了我一个早上!