当前位置: 移动技术网 > IT编程>移动开发>Android > Android 中ListView和GridView赋值错位

Android 中ListView和GridView赋值错位

2019年07月24日  | 移动技术网IT编程  | 我要评论

李敖演讲,96南京大学碎尸案,网游之双绝

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了。

如有疑问请留言或到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网