存储片段以处理屏幕旋转变化

时间:2013-02-19 01:33:39

标签: android fragment screen-rotation

我有一个由一个活动和3个片段组成的应用程序。该活动创建一个菜单,其中包含用于创建相应片段的按钮。我的代码在没有屏幕旋转的情况下工作得很好,但是当我旋转屏幕时它会中断。

创建片段时,我的第一次尝试未包含setRetainInstance(true)调用。我发现的问题是,在将片段替换两次后(一个片段保留在后栈上),如果我旋转屏幕,我会在当前未显示的片段中获得空指针异常。 编辑:只是注释,空指针异常位于下面显示的setOnItemClickListener调用中。 lv方法中声明了onCreateView()

我的第二次尝试,我在创建片段时包含setRetainInstance(true)调用。这解决了第一个问题。但是,我的一个片段是ListFragment,当我旋转屏幕时,似乎不再设置OnItemClickListener。这是我设置监听器的代码:

ListAdapter adapter = new SimpleAdapter(getActivity(),
        gameslist, R.layout.list_object,
        new String[] { TAG_ID, TAG_NAME, TAG_LOCATION, TAG_CREATED },
        new int[] { R.id.id, R.id.name, R.id.location, R.id.created_date });
setListAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> arg0,
                View arg1, int position, long arg3) {
            // ...
        }
});

此问题的任何想法或解决方案?我是否完全了解如何设计片段?

感谢您的帮助!

编辑:另外,只是为了我的理解,在代码中哪些是重新创建的片段?它们不属于我活动的oncreate()功能。谢谢!

想出来!我在onCreate()函数中调用了AsyncTask,它在屏幕旋转时被调用。但是,我在onCreateView()函数中声明了lv,在创建视图之前不会调用它。的NullPointerException!

1 个答案:

答案 0 :(得分:1)

你的片段中是否有onCreate(...)和onResume()以及onCreateView(...)?

三者中的哪一个是适配器代码?