ListView更新插入,编辑,删除notifyDataSetChanged()无效

时间:2011-10-10 16:57:42

标签: android

我有一个ListView绑定到SimpleCursorAdapter,我想在修改数据库时刷新(通过插入,更新或删除行)。 cursor.notifyDataSetChanged()无效(在UI线程上调用), ListView.removeViewAt(int)抛出 UnsupportedOperationException 。 我应该在Android上做些什么来获得这样的基本行为?

请注意,数据库已正确受影响,并且在重新启动活动时会显示修改。但是重新启动活动不是一个选项,更改ListView适配器是这里的最后一个资源,因为它是一个黑客,无法保证平稳过渡

声明 相当基本的问题,问了几百万次并回答了零。 请不要回答如果您从未在代码中执行此操作,请不要问我的,并且不要打扰尝试此尝试只有在您知道如何完成后才能回答

1 个答案:

答案 0 :(得分:1)

从API> = 11,执行此操作的方法是使用CursorLoader,这也包含在Android兼容性库中,因此如果您定位的是以前的Android版本,也可以使用此功能。 CursorLoader将在后台线程中进行查询并返回光标。 您需要实施ContentProvider 。您可以阅读documentation以了解如何使用它。基本上你初始化一个加载器然后在你知道数据发生变化时重新启动它。在回调中,您只需交换适配器的光标。

或者您可以在requery()上使用Cursor。适配器将自动收到有关更改的通知。现在不推荐使用此方法,当然,这不是推荐的方法。