2

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

setRetainInstance(true)创建片段时,我的第一次尝试没有包括调用。我发现的问题是,在两次替换片段后(一个片段保留在后堆栈上),如果我旋转屏幕,我会在当前未显示的片段中得到一个空指针异常。编辑:请注意,空指针异常在setOnItemClickListener下面显示的调用中。 lvonCreateView()方法中声明。

我的第二次尝试,我setRetainInstance(true)在创建片段时包含了一个调用。这解决了第一个问题。但是,我的片段之一是 a 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,在创建视图之前不会调用该函数。空指针异常!

4

1 回答 1

1

你的片段中实现了 onCreate(...) 和 onResume() 和 onCreateView(...) 吗?

适配器代码在这三个中的哪一个?

于 2013-02-19T01:50:31.360 回答