我有一个由一个活动和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!
答案 0 :(得分:1)
你的片段中是否有onCreate(...)和onResume()以及onCreateView(...)?
三者中的哪一个是适配器代码?