我有一個由一個活動和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,直到創建視圖纔會調用該函數。空指針異常!
你有onCreate(...)和onResume()和onCreateView(...)實現在你的片段?這三個適配器代碼中哪一個是? – edthethird 2013-02-19 01:51:22
我有onCreate和onCreateView實現。適配器代碼位於由onCreate調用的AsyncTask中。謝謝。 – user2085335 2013-02-19 01:55:05
最後一件事 - 適配器代碼在OnPostExecute方法中,對嗎? – edthethird 2013-02-19 02:46:31