最近做一个通讯录项目遇到ListView从数据库获取数据并刷新UI显示问题。在网上找资料都说用适配器的notifyDataSetChange()方法就可以,但是我调用这个方法UI界面并没有及时刷新。问题如下:
首先,我的数据从数据库获得并用一个List对象list来接收,然后绑定到适配器上(list第一次从数据库获取数据),然后在对数据库的数据进行一系列的增删查改操作后,我再次调用获取数据库数据的方法,并将返回值赋值给list(list第二次获取数据库数据)(PS:这个时候从数据库获取到的数据已经改变)然后调用notifyDataSetChange()方法刷新数据,发现UI界面没有及时更新,而需要再次进入界面才能刷新。
思考:数据源list的数据已经改变,为什么notifyDataSetChange()方法没有起到应有的作用???
问题解决:后来,实在没办法,自己写了一个Demo,发现用上述方法系统并不认为数据源的内容改变,因为我们并没有对第一次获取数据的list的内容进行直接的操作,比如:我们给数据库插入了一条数据,然后我们用list去获取数据库全部数据,list的内容明显比之前多了一条,但是,我们并没有给之前的list添加该条数据,系统默认我们没有对数据源list的内容进行改变。因此notifyDataSetChange()方法方法无法刷新界面。
解决方法:在对数据库进行数据操作的同时,list除了第一次从数据库获取数据之外,不再直接从数据库获取数据,而是直接通过list的add()或者
remove()方法同步数据库的数据。。。这样才能调用notifyDataSetChange()方法来刷新界面。
(PS:才刚刚开始学习android... 说得不对的欢迎大家指导.... 谢谢。。)