您的位置:首页 > 移动开发 > Android开发

做android 开发遇到的问题及解决办法记录

2017-01-20 16:28 731 查看
问题一  通过Listview 加载本地数据库数据时报错:The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified

产生原因,我通过另外一个线程去获取数据库数据并把得到的数据加入到listView的adapter的数据源list里面,数据获取过后我就通过Handler.sendEmptyMessage通知主UI线程刷新ListView,Handler接到消息后在uI线程更新lisView,结果就报以上错误。居分析加网上百度得出参数原因是adapter里的数据更新与adapter调用notifyDataSetChanged()刷新listview之间存在延时意思是Adapter数据改变源和list刷新不及时。我的错误的具体原因是在非UI线程更新了Adapter的数据源。然后在通知UI线程去更新listview这个过程期间存在延迟。

解决办法:

用一个临时变量list在数据获取线程得到数据。然后Hundle接收到消息的HandlerMessage方法里在把临时变量值添加到adapter的数据源list里面,然后在调用adapter.notifyDataSetChenged()来刷新ListView展示最新内容

问题二   ListView 通过开启一个线程获取本地数据库数据后在用adapter调用notifyDataSetChanged()刷新ListVew不起作用没有刷新

参数原因:我直接把数据库获取的list数据通过"="赋值给了listview数据源。导致没法刷新。因为我通过这个方法赋值只是让数据源list指向数据库方法获取的list对象的地址。而数据源list本身原来的地址的数据是没有改变的。又因为adpter调用notifyDataSetChanged()实现机制是检查adaper数据源list地址的数据有没有改变如果改变就刷新如果没有改变就不刷新,所以我的做法是没改变的。才导致刷新无效

解决方法,用一个变量list来得到数据库获取的数据然后把该值通过数据源List的addAll把值添加到数据源里面。这样数据源地址的值也就改变了。adpter在调用notifyDataSetChanged()就有效了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息