数据加载完 adapternotifyDataSetChanged()不更新的问题

         上一篇博客,我们的程序才刚开始做。

         当你看到这一篇的时候我们的app已经接近尾声了,说实在的还是有点慢啊。

        每天都很紧,所以也没有抽出时间来写博客。

        这篇博客我必须写的原因是。。。

        昨天晚上和同事出去喝酒,一直喝到四点。。。。

         今天一点才起床来。

       准备做做剩下的部分。作为商户端扫描二维码。晚上六点突然发现商铺列表更新有问题。

       做啊做,一直到现在,终于解决了。但是真的没有白白熬那么长时间,真的发现了一个问题,诚然是马虎所知,但我感觉值得深思。

       

上面这段代码  是在网络中获得数据    当我没有infoLista.addAll(infoList)这句话的时候,notifyDataSetChanged()是不起作用的。

后来我才知道,是因为我第一个备注上面那句代码的原因。他虽然被声明为全局变量,然而每次访问网络他都被在这里被重新声明,貌似不是被负值的感觉,所以在adapter中并不能感觉到它的变化,所以刷新没有反应。

好了终于可以下份睡觉,躺床上看看火影轻松的早睡了。



下面是参考资料   草  当时怎么没看懂呢    现在悟出来后才明白他是什么意思   醉了

使用Listview的时候: 当要动态显示更改后的数据(例如数据库改动), 很多人应该都用过notifyDataSetChanged();这个方法来刷新Listview,显示改后的数据.

这时候就要注意了:
                 ......
                 private ArrayList<HashMap<String, Object>> usersList;
                 ......
                 usersList= query(......);     //根据查询函数获取一个ArrayList并赋值给绑定到Adapter的数据源usersList
                 sAdapter.notifyDataSetChanged();
                 ......

           如果你也是:   上面这种形式去刷新ListView的数据的话, 是不可以更新的. 必须改成如下形式:

                 ......
                //usersList= query(......);   
                 usersList.clear(); 
                 usersList.addAll(query(......));
                 sAdapter.notifyDataSetChanged();

///

         原因是:    sAdapter会通过usersList获取List中的内容。但是实际上可能(也应该)是,在调用super(MyActivity.this, R.layout.item, usersList)时sAdapter保存了usersList指向原List(假设为List a)的引用,在调用query函数之后,usersList指向了一个新的List(List b)。但是在调用notifyDataSetChanged()时,sAdapter会跟据保存的引用(即指向List a的引用)去更新,因此当然还是原来的结果,不会进行更新。


如果大家也出现这种情况可以使用后者去刷新ListView, 应该就没问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值