yung7086的机器人锤炼

个人博客全部原创

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

 

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

阅读更多
个人分类: android前行
上一篇LinearLayout点击事件后面的布局响应了
下一篇安卓view.getMeasuredHeight()得到的高度单位以及dp和px的转换
想对作者说点什么? 我来说一句

apache v2.0.48 For win Sour

2005年12月07日 7.51MB 下载

没有更多推荐了,返回首页

关闭
关闭