上一篇博客,我们的程序才刚开始做。
当你看到这一篇的时候我们的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, 应该就没问题了