保存ListView内容

时间:2014-02-18 06:37:56

标签: android android-listview android-fragments android-asynctask navigation-drawer

我有一个Google NavigationDrawer添加/替换fragments。其中一个fragments的{​​{1}}填充了自定义listView网络请求(BaseAdapter,需要时间)。我想要的是在某处保存asyncTask内容,以便用户通过listView导航到另一个片段然后或稍后导航回包含navigationDrawer的{​​{1}} - 我想要一个{ {1}}在asyncTask完成加载新内容之前立即使用已保存的旧内容进行填充。最低API为10.

我尝试了什么。

  1. fragment - 序列化listView。不知何故,我没有让它工作。此外,这不是解决我的问题,因为onSaveInstaceState在导航cloudDrawer时没有触发。

  2. 设置新片段的listView然后onSaveInstanceState /加载它。这适用于像EditTexts和TextView这样的简单视图,但是没有使它适用于listView。

  3. 保存listView内容的最佳方法是什么?请帮帮我。

3 个答案:

答案 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存储listview的项目

然后使用共享首选项来保存对象。 Android ArrayList of custom objects - Save to SharedPreferences - Serializable?

答案 1 :(得分: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

答案 2 :(得分:0)

我找到了一个好方法。

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

并将list_items保存在共享首选项中。要检索只需使用getString()并使用上面的代码