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()并使用上面的代码