昨晚做一个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
遇到问题记下来无聊时候,