Android 中ListView和GridView赋值错位
程序员文章站
2023-11-30 21:56:22
listview和gridview多次调用getview的bug,导致赋值错位
最近总遇到写gridview适配器赋值时,最后一两个需定义其他图片时,赋图错误,原因就...
listview和gridview多次调用getview的bug,导致赋值错位
最近总遇到写gridview适配器赋值时,最后一两个需定义其他图片时,赋图错误,原因就是适配器的getview多次调用,导致数据赋值错误,上网搜索终于找到解决方案,以此记录下。
一.listview
1.原因
因为listview一般用的是wrap_content,高度不确定,导致系统需要不断地测量,也就多次调用onmeasure方法,所以就多次调用getview。
2.解决
很简单,把宽高写死即可(明确给个数字或者match_parent)
二.gridview
1.原因
不管高度和宽度写死与否都会多次调用getview,原因有待继续探索,。。。。
2.解决
无法阻止多次调用getview,只能在onmeasure调用getview的时候不要去对convertview做赋值的操作,只有当onlayout的时候再对convertview进行操作。
1).自定义gridview:
mygridview.java public class mygridview extends gridview { public boolean isonmeasure; public mygridview(context context) { super(context); } public mygridview(context context, attributeset attrs) { super(context, attrs); } public mygridview(context context, attributeset attrs, int defstyle) { super(context, attrs, defstyle); } @override protected void onmeasure(int widthmeasurespec, int heightmeasurespec) { isonmeasure = true; super.onmeasure(widthmeasurespec, heightmeasurespec); } @override protected void onlayout(boolean changed, int l, int t, int r, int b) { isonmeasure = false; super.onlayout(changed, l, t, r, b); } }
2).getview中对convertview的处理
@override public view getview(int position, view convertview, viewgroup parent) { system.out.println("xcqw getview 1***position"+position); viewholder holder = null; if (convertview == null) { convertview = inflater.inflate(r.layout.item, parent, false); holder = new viewholder(); holder.tvcontent = (textview) convertview.findviewbyid(r.id.tv_content); convertview.settag(holder); } else { holder = (viewholder) convertview.gettag(); } if(((mygridview) parent).isonmeasure){ //如果是onmeasure调用的就立即返回 return convertview; } system.out.println("xcqw getview 2***position"+position); string content = contentlist.get(position); holder.tvcontent.settext(content); //如果不是onmeasure调用的就可以正常操作了 //赋值操作 return convertview; }
这样就ok了。
如有疑问请留言或到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
推荐阅读
-
Android解决ScrollView下嵌套ListView和GridView中内容显示不全的问题
-
Android中listview和imageview实现条目单选效果
-
Android中listview和imageview实现条目单选效果
-
android ListView和GridView拖拽移位实现代码
-
Android 中ListView和GridView赋值错位
-
Android ListView中headerview的动态显示和隐藏的实现方法
-
android ListView和GridView拖拽移位实现代码
-
Android ListView中headerview的动态显示和隐藏的实现方法
-
Android 中ListView和GridView赋值错位
-
Android之ScrollView嵌套ListView和GridView冲突的解决方法