问题一  通过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. 简单的三方登录SDK示例,Android(安卓)Activity之间数据的传递
  2. JSONArray的使用
  3. Android(安卓)安全 —— 本地拒绝服务漏洞
  4. Android数据库操作查询中Cursor类的问题
  5. Android联系人数据库全解析(3)
  6. Android联系人数据库全解析(4)
  7. 使用NDK开发SQLite3
  8. Android开发之数据保存技术(一)
  9. mybatisplus的坑 insert标签insert into select无参数问题的解决

随机推荐

  1. [Android] 备份手机上的超级终端、VIM
  2. Chrome Beta开发者细节
  3. Android聊天软件开发(基于网易云IM即时通
  4. android 操作sqllite 数据库
  5. Android中的ListView实现图片文字和按钮
  6. android 飞行模式 注册广播后 三种状态监
  7. Android内存泄漏总结
  8. Android(安卓)自定义绚丽的进度条(类似H5
  9. android打电话程序
  10. Android 之 监控手机电量