我有一个Google NavigationDrawer
添加/替换fragments
。其中一个fragments
的{{1}}填充了自定义listView
网络请求(BaseAdapter
,需要时间)。我想要的是在某处保存asyncTask
内容,以便用户通过listView
导航到另一个片段然后或稍后导航回包含navigationDrawer
的{{1}} - 我想要一个{ {1}}在asyncTask完成加载新内容之前立即使用已保存的旧内容进行填充。最低API为10.
我尝试了什么。
fragment
- 序列化listView
。不知何故,我没有让它工作。此外,这不是解决我的问题,因为onSaveInstaceState在导航cloudDrawer时没有触发。
设置新片段的listView
然后onSaveInstanceState
/加载它。这适用于像EditTexts和TextView这样的简单视图,但是没有使它适用于listView。
保存listView内容的最佳方法是什么?请帮帮我。
答案 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在列表中显示数据。
答案 2 :(得分:0)
我找到了一个好方法。
String list_items = ""; // all your items are here, but separate it with a comma (,)
String[] list = list_items.separate(",");
并将list_items保存在共享首选项中。要检索只需使用getString()并使用上面的代码