问题一  通过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()就有效了。



更多相关文章

  1. 基于Java LinkedList,实现Android大数据缓存策略
  2. 简单的三方登录SDK示例,Android Activity之间数据的传递
  3. Android开发之数据保存技术(一)
  4. Android联系人数据库全解析(4)
  5. Android联系人数据库全解析(3)
  6. android UI线程安全问题
  7. Android 数据序列化总结
  8. Android数据库操作查询中Cursor类的问题
  9. 关于Android中的数据存储

随机推荐

  1. 如何在php中的谷歌分析中显示搜索概述
  2. 如何为MySQL中包含记录的现有表创建唯一
  3. PHP 轻量级的PHP类检测移动设备(包括平板
  4. 从PHP登录请求获取空的AJAX响应
  5. PHP-设计模式-依赖注入
  6. 键入提示 - 指定对象数组
  7. PHP MySqli Multiple query & while in o
  8. MySQL命名约定,字段名称是否应包含表名?
  9. composer不能生成sf2 autoload文件。
  10. 用一个听众听多个事件?