0

我有一個谷歌的NavigationDrawer其中增加/替換fragments。其中一個fragments有一個listView通過網絡請求(asyncTask,需要時間)填寫定製BaseAdapter。我想要的是在某處保存listView內容,所以如果用戶通過navigationDrawer導航到另一個片段,然後再導航回listViewfragment - 我希望在asyncTask完成加載新內容之前立即使用保存的舊內容填充listView。最低的API是10.保存ListView內容

我試了一下。

  1. onSaveInstanceState - serialize Parcelable ArrayList<CustomObject>。不知何故,我沒有得到它的工作。另外,這並不能解決我的問題,因爲onSaveInstaceState不會在通過navigationDrawer導航時觸發。

  2. 設置新片段的InitialState(setInitialSavedState)然後saving(saveFragmentInstanceSate) /加載它。這適用於像EditTexts和TextView這樣的簡單視圖,但沒有爲listView工作。

什麼是保存listView內容的最佳方式?請幫幫我。

+0

將其保存在您的AsyncTask並讓適配器讀取保存的數據 – pskink

+0

@psknik更多詳細信息? – localhost

+0

發佈更多代碼以便更好地理解 –

回答

1

首先獲取所有列表視圖項。

CustomListViewAdapter listadapter = (CustomListViewAdapter) listview.getAdapter(); 
ArrayList<CustomObject> object=new ArrayList<CustomObject>(); 
for(int position=0;position<listadapter.getCount();position++) 
    object.add(videoadapter.getItem(position)); 

現在使用object存儲列表視圖

然後使用共享偏好保存對象的項目。 Android ArrayList of custom objects - Save to SharedPreferences - Serializable?

+0

我沒有問題將內容存儲在變量中。但是在用戶瀏覽片段後 - 它會沿着vith變量被銷燬。 – localhost

+0

查看編輯答案... –

+0

謝謝,會試試看。 – localhost

0

正確的做法是將網絡查詢結果保存到數據庫(sqlite)中,並使用該數據庫中的數據在列表中顯示項目(CursorAdapter最適合此目的)。

這些教程很好地解釋瞭如何使用Sqlite製作自己的Content Provider,並使用CursorAdapter在列表中顯示數據。

http://docs.xamarin.com/guides/android/user_interface/working_with_listviews_and_adapters/part_4_-_using_cursoradapters/

http://www.vogella.com/tutorials/AndroidSQLite/article.html

0

我找到了一個好辦法。

String list_items = ""; // all your items are here,    but separate it with a comma (,) 
    String[] list = list_items.separate(","); 

並將list_items保存爲共享首選項。檢索只需使用getString()並使用上面的代碼