notifyDataSetChanged使用总结

notifyDataSetChanged使用总结在做客户端项目时,想使用notifidatasetchanged来刷新ListView,但是一直报错,ThecontentoftheadapterhaschangedbutListViewdidnotreceivea notification,先总结notifidatasetchanged使用要点如下:1.首先要包装adapter监视的数据是同一个对象

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

在做客户端项目时,想使用notifidatasetchanged来刷新ListView,但是一直报错,

The content of the adapter has changed but ListView did not receive a  

notification,先总结notifidatasetchanged使用要点如下:


1.首先要包装adapter监视的数据是同一个对象,比如:

adapter  =  new SimpleAdapter(context, data, resource, from, to);
data只能是一个对象,否则notifidatasetchanged无效

2.data数据发生变化时,要及时用adapter.notifidatasetchanged来通知主线程刷新UI,
但不是每次改变都刷新 。比如:
       正常情况下执行完data.clear() 要通知刷新UI,如果在一个方法里,data.clear()
只做初始化,接下来给data添加新数据,
则要在添加完之后通知。

3.如果涉及到网络请求,比如请求json数据并解析,然后更新解析数据显示在ListView上,
此时会创建子线程:
new Thread (){
public void run(){
………..
}
}
注意通知更新UI一定要放在主线程中执行。比如使用for循环给data添加数据:
data.add()执行完之后,就使用消息处理机制发送请求:
Message msg = new Message();
msg.what = CHANGE_UI;
handler.sendMessage(msg);
然后在主线程的Handler中如下刷新:
private Handler handler = new Handler() {

public void handleMessage(android.os.Message msg) {

switch (msg.what) {

case CHANGE_UI:
adapter.notifyDataSetChanged();
break;
default:
break;
}

4.代码中已经使用了AdapternotifyDataSetChanged()方法通知UI更新了,但是
还是会出现The content of the adapter has changed but ListView did not receive a
notification

。究其根本原因,还是线程之间同步的问题。比如,线程
1更新了Adapter中的内容,
却还没有来得及通知内容已经更新,就又有线程2更新了Adapter中的内容,这个时候
如果线程1再通知内容更新,就会出现上述异常。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/219290.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Win11双屏设置双壁纸–2K屏+1080P使用不同壁纸的方法

    Win11双屏设置双壁纸–2K屏+1080P使用不同壁纸的方法先上方法及效果:方法:两张图片(图1尺寸:1920×1080,图2尺寸:2560×1440),Photoshop裁减图1并与图2拼接成一张图片(尺寸:4480×1440)设置为背景图片,并在【个性化-背景】中设置为【平铺】;效果:具体步骤:1.环境:win11(win10类似),屏幕1(1080p),屏幕2(2k屏,16:9);2.所需图片:图1(1920×1080);图2(2560×1440)3.工具:Photoshop(其他拼图工具亦可)4.步骤:1)在PS中【图像-画布大小】中修改画布尺

    2022年10月27日
  • 前端面试ajax考点汇总_javascript常见面试题

    前端面试ajax考点汇总_javascript常见面试题前端面试题总结(四)ajax篇1、什么是AJAX,为什么要使用Ajax(请谈一下你对Ajax的认识)什么是ajax:AJAX是“AsynchronousJavaScriptandXML”的缩写。他是指一种创建交互式网页应用的网页开发技术。Ajax包含下列技术:基于web标准(standards-basedpresentation)XH…

  • 手把手教你python画图(精简实例,一看就懂)

    手把手教你python画图(精简实例,一看就懂)1、不叨叨,直接上代码importmatplotlib.pyplotaspltx=[1,2,3,4,5]y=[0,3,2,7,9]plt.figure()plt.plot(x,y,’r-‘,lw=5)plt.show()2、结果图

  • lamda表达式和三个例子

    lamda表达式和三个例子(参数)->{方法语句}这样的形式就是lamda表达式,不用定义参数和返回值的数据类型-可以省略的情况:只有一个参数的时候参数可以不用括号;只有一个语句的时候大括号可以不用;只有一个语句且是return的时候可以省略return,直接写需要返回的值(表达式)目录1、for循环实例2、多线程实例3、sort排序实例1、for循环实例这个实例展示了传入一个参数且无返回值的用法定义一个字符串数组并实例化,对这个数组进行操作。通常的打印所有元..

  • 技术解析:阿里云 AnalyticDB 如何实现全球性能第一

    技术解析:阿里云 AnalyticDB 如何实现全球性能第一简介: 北京时间2020年5月4日,TPC官网正式公布,阿里云自研云原生数据仓库AnalyticDB通过严苛的TPC-DS全流程测试,性能较前世界纪录提升29%,单位成本仅为其1/3,再次成为全球性能领先的数据仓库。本文将对AnalyticDB进行全面解析,详细阐述其技术架构及存储和查询技术,并对AnalyticDB的下一步发展做出展望。前言随着云时代全面到来,企业数据需求不断变化,从传统的BigData逐渐向FastData演进,主要表现在如下

  • PHP中定义常量的区别,define() 与 const[通俗易懂]

    PHP中定义常量的区别,define() 与 const

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号