关闭

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

标签: listviewCollections.copyadp.notifyDataSetCha
989人阅读 评论(0) 收藏 举报
分类:

昨晚做一个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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:147936次
    • 积分:1143
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:0篇
    • 译文:0篇
    • 评论:48条
    文章分类
    最新评论