做记事本应用,遇到数据库中的信息变化,如何使相应的ListView更新的问题。
查资料后解决,
- 用ListView来显示数据库的数据时,经常会用到SimpleCursorAdapter来作为ListView的适配器,这时要用到Cursor来访问数据库,当数据库数据发生改变时,需要通过cursor.requery(),并调用adapter.notifyDataSetChanged()的方法来更新ListView。注:这个方法在API11以后被废弃了,原因是执行该方法是会查询数据库,如果查询动作是在主线程(UI线程)中完成的,由于查询过程要耗一定时间,所以有可能引起ANR。推荐通过异步的方式重新获取一个新的cursor,然后使用Adapter.changeCursor(newCursor)更新cursor,最后再使用adapter.notifyDataSetChanged()即可。
- 关于在更改Cursor之后,进行adapter.notifyDataSetChanged(),但在我的使用中,当数据库新增了内容的时候,不调用adapter.notifyDataSetChanged()也能使ListView更新;当数据库内容删减的时候,必须要调用adapter.notifyDataSetChanged(),否则会报错。
两篇觉得写的不错的相关文章,可以参考一下: