调用notifyDataSetChanged之后listview不刷新

为什么调用notifyDataSetChanged之后listview不刷新

       相信大家android开发中也经常用到ListView这个控件,ListView中我们都要设置adapter,来与我们的listview进行一个匹配。我们经常new 一个adapter时候直接把我们的数据list传入。如:

                   mXXXListAdapter = new XXXListAdapter(mContext,mList);

                   setAdapter(mXXXListAdapter);

这是我们第一次初始化ListView各个item的常见调用,但是如果我们之后要变化ListView的展示呢,比如常见微信朋友圈再加载、、、、这种就是我们需要我们刷新ListView的展示。那我们怎么刷新ListView的展示呢?那就是调用adapter的notifyDataSetChanged方法,调用notifyDataSetChanged后ListView就会根据我们最新的mList数据来绘制我们新的ListView。

         关键问题来了,为什么我们只调用notifyDataSetChanged就可以实现ListView的刷新,我们并没有像刚开始那样把我们修改后的mList再进行传递给adapter?

       哈哈,其实要是知道了这个原理也就可以理解我们今天要讨论的问题关键,其实这还是涉及我们java中的参数传递问题。下面我们分步骤说明:

 1、 初始化了 mList = new List<T>();

 2、 mXXXListAdapter = new XXXListAdapter(mContext,mList);//把mList传递给了adapter,这时adapter里面也有相应list对象,实际上adapter的list只是一个引用也指向mList指向的内存空间

 3、当mList数据修改完毕后(指的开始mList指向的内存空间数据修改而不是mList指向其他内存空间),然后调用notifyDataSetChanged通知adapter去刷新,这时adapter的list也是指向开始mList指向的那一块内存空间去刷新ListView

 

所以说调用notifyDataSetChanged出现ListView不刷新问题根源在于mList指向了其他内存空间,而不是修改了原指向内存空间内容。

下面通过代码给大家说明一下:

                  mList = new List<T>();

                  mList.add(T);

                 mXXXListAdapter = new XXXListAdapter(mContext,mList);

                   setAdapter(mXXXListAdapter);

 

修改数据mList数据:

mList = otherList;//错误,让mList指向了其他内存空间,调用notifyDataSetChanged出现ListView不刷新

mList.add(therList.get(0));//正确修改方法mList只是修改了内存空间的内容,调用notifyDataSetChanged出现ListView会刷新

其实也可以认为是深拷贝与浅拷贝的区别

好啦!到这里我想应该给大家讲清楚了调用notifyDataSetChanged出现ListView不刷新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值