BaseAdapter.notifyDataSetChanged()和.Collections.copy(destination, sour)

昨晚做一个listview需要根据用户点击刷新listview数据的,因为数据又是从服务器获取的就有了下面的方法

List<QueryCarDetailObj> listcarinfo = new ArrayList<QueryCarDetailObj>();//全局变量;

     adp = new Tran_ListAdp(Tran_main.this,listcarinfo);
      listview.setAdapter(adp);

设置的设配器了根据用户点击刷新listview数据的方法;

public void getlistviewdata(int carid)
 {
  listcarinfo=list.get(carid).getQueryCarDetailList();

  adp.notifyDataSetChanged();

 }

貌似没问题,就是不刷新,然后想想,适配器是保存了一个listcarinfo的引用,而listcarinfo=list.get(carid).getQueryCarDetailList();这个返回了的是一个新的引用,所以一刷新开始的数据也没了,除非重新setAdapter,最后想想就复制吧

Collections.copy(listcarinfo,list.get(i).getQueryCarDetailList() );郁闷

Source does not fit in dest" Exception报错,原来说我的目标数组长度不够源数组,我去我刚new的数组肯定size是0啦,不知道谷歌怎么想的,集合不是可以自动设置长度。好了烦躁了,干脆for循环在添加

总结

adp.notifyDataSetChanged();

1必须是开始设置适配器的资源对象的引用,就是引用地址不能变了

2资源对象的资源确实变了

Collections.copy(listcarinfo,list.get(i).getQueryCarDetailList() );

就推荐好文章

http://darrenzhu.iteye.com/blog/1642672

http://jxdwuao.iteye.com/blog/1140400

 

遇到问题记下来无聊时候,

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值