我有一个由一个活动和 3 个片段组成的应用程序。该活动创建一个菜单,其中包含创建适当片段的按钮。我的代码在没有屏幕旋转的情况下完美运行,但是当我旋转屏幕时它会中断。
setRetainInstance(true)
创建片段时,我的第一次尝试没有包括调用。我发现的问题是,在两次替换片段后(一个片段保留在后堆栈上),如果我旋转屏幕,我会在当前未显示的片段中得到一个空指针异常。编辑:请注意,空指针异常在setOnItemClickListener
下面显示的调用中。 lv
在onCreateView()
方法中声明。
我的第二次尝试,我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,在创建视图之前不会调用该函数。空指针异常!