处理光标频繁读写的列表视图的最佳方法是什么?

时间:2011-09-07 17:26:04

标签: android android-listview simplecursoradapter

我正在构建一个库存应用程序。这些项目以网格视图显示,并且网格视图的每个单元格在右上角还有一个TextView,用于显示项目的可用数量。用户可以单击gridview单元格以增加数量,或单击长按以减少数量。

我目前正在使用从SimpleCursorAdapter派生的类来显示数据,但我不确定如何更新数据库中的数量。我担心如果我直接写入数据库然后创建一个新的游标并更改游标,如果用户反复点击(例如添加10个项目),应用程序可能会陷入困境

我曾考虑将查询游标中的数据复制到Activity中的数组,然后使用ArrayAdapter,但这似乎很糟糕。

我还考虑过在SimpleCursorAdapter中创建一个数组,该数组会缓存已修改的项目,然后在暂停时保存这些项目......

有更好的方法吗?一个更Android的方式?

我想这归结为:在数据库和用户界面中进行快速更改的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

我在这方面对游标知之甚少,但我会根据模型对象而不是Cursor创建自定义ArrayAdapter。这只是个人偏好,但通过这样做,我不必对Cursor实现做任何假设,也不必在内部和外部了解它。

假设您在网格中显示Item类型的集合。我将创建一个名为ItemsList的类,它派生自ArrayList<Item>,我的适配器将派生自ArrayAdapter<Item>。在ArrayList周围创建包装器的原因是您可以允许用户自由地与它进行交互并将其标记为“脏”并允许它异步更新数据库。这样,您只需在适配器上调用notifyDataSetChanged(),就不必考虑更新数据库的开销......您已经分离了与正在显示的集合的交互以及更新持久存储的过程

顺便说一句......如果您还没有看过它,那么在使用ListViews和Adapters时必须使用此视频:

http://www.youtube.com/watch?v=wDBM6wVEO70

答案 1 :(得分:0)

您可以使用常规listView和常规适配器,其中包含项目列表(arraylist)。每次用户点击或长按时,您都可以编辑适配器中的列表和notifyDataChanged(),这将反映listView上的列表更改。如果您想在用户退出应用程序后保留列表,您可以使用数据库(对于更大量的数据)或首选项(对于较小的数据量)。