Android 方向更改时碎片视图为空

Android 方向更改时碎片视图为空,android,view,android-fragments,Android,View,Android Fragments,在将我的应用程序从普通活动样式移植到片段样式时,我遇到了一些问题。我开始注意到,当一个片段被重新创建,或者从后台弹出时,它会丢失它的视图。当我这么说的时候,我指的是一个列表视图。我所做的是将项目加载到listview中,然后旋转屏幕。当它返回时,会得到一个nullpointerexception。我调试了它,确信listview是空的。下面是片段的相关代码 @Override public View onCreateView(LayoutInflater inflater, ViewGr

在将我的应用程序从普通活动样式移植到片段样式时,我遇到了一些问题。我开始注意到,当一个片段被重新创建,或者从后台弹出时,它会丢失它的视图。当我这么说的时候,我指的是一个列表视图。我所做的是将项目加载到listview中,然后旋转屏幕。当它返回时,会得到一个nullpointerexception。我调试了它,确信listview是空的。下面是片段的相关代码

@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,它工作起来很有魅力,谢谢。如果你把它作为答案贴出来,我会接受的你刚刚救了我一个早上!你刚刚救了我一个早上!