2013-02-19 80 views
2

我有一個由一個活動和3個碎片組成的應用程序。該活動創建一個帶有按鈕的菜單,創建適當的片段。我的代碼在沒有屏幕旋轉的情況下完美運行,但是當我旋轉屏幕時它會中斷。存儲碎片以處理屏幕旋轉變化

創建碎片時,我的第一次嘗試不包括setRetainInstance(true)調用。我發現的問題是,在兩次替換片段(一個片段保留在背部堆棧中)之後,如果我旋轉屏幕,那麼在當前未顯示的片段中會出現空指針異常。 編輯:請注意,空指針異常位於下面顯示的setOnItemClickListener調用中。 lvonCreateView()方法中聲明。

我的第二次嘗試,包括創建片段時的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,直到創建視圖纔會調用該函數。空指針異常!

+0

你有onCreate(...)和onResume()和onCreateView(...)實現在你的片段?這三個適配器代碼中哪一個是? – edthethird 2013-02-19 01:51:22

+0

我有onCreate和onCreateView實現。適配器代碼位於由onCreate調用的AsyncTask中。謝謝。 – user2085335 2013-02-19 01:55:05

+0

最後一件事 - 適配器代碼在OnPostExecute方法中,對嗎? – edthethird 2013-02-19 02:46:31

回答

1

你有onCreate(...)和onResume()和onCreateView(...)在你的片段中實現嗎?

三者之一是哪個適配器代碼?