ListView更新插入,编辑,删除notifyDataSetChanged()不工作
问题描述:
我有一个ListView绑定到一个SimpleCursorAdapter,并且我希望它在我修改数据库(通过插入,更新或删除行)时进行刷新。 cursor.notifyDataSetChanged()不起作用(它在UI线程上调用)和ListView.removeViewAt(int)将抛出一个UnsupportedOperationException。 我应该在Android上做些什么来获得这样的基本行为?ListView更新插入,编辑,删除notifyDataSetChanged()不工作
请注意,数据库已正确受到影响,并且在重新启动活动时显示修改。但在重新启动的活动是不是一种选择这里,并改变ListView控件适配器是最后的资源在这里,因为它是一个黑客,并不能保证一个平稳的过渡
免责声明 很基本的问题,提出了数百万次,并回答为零。 请不要回答如果你从未在你的代码中做过这个,不要求我的,不要打扰试试这个或试试。 唯一的答案,如果你知道它是如何做
答
从API> = 11这样做是使用CursorLoader
的方式,这也包括了Android兼容性库中,所以你也可以使用这个,如果你的目标一以前的Android版本。 CursorLoader
将在后台线程中进行查询并返回游标。 您将需要实施ContentProvider
。您可以阅读documentation以了解如何使用它。基本上你会初始化一个loader,然后当你知道数据已经改变时重启它。在回调中,您只需交换适配器的光标。
或者您可以在Cursor
上使用requery()
。适配器将自动获得更改通知。此方法现在已被弃用,当然,这不是推荐的方法。
谢谢,这工作像一个魅力 – Raffaele