本文主要是介绍GridView动态设置Item的宽高 第一个Item显示不正常,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题:
最近在项目中遇到一个很奇怪的问题,在做一种类似QQ空间图片显示效果中,我用的XLisview嵌套GridView,然后计算设置Gridview的item高度,设置为为正方形,并用Glide框架加载图片;
结果,在滚动时,第一个item就不能正常显示了。。。很郁闷。。源码是这样的
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(c).inflate(R.layout.img_gv,
parent, false);
holder.img = (ImageView) convertView.findViewById(R.id.img);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (wh != 0) {
AbsListView.LayoutParams param = new AbsListView.LayoutParams(wh,
wh)
convertView.setLayoutParams(param);
}
final String item = list.get(position);
Glide.with(c).load(item).placeholder(R.drawable.pic_default)
.error(R.drawable.pic_no_default).into(holder.img);
return convertView;
解决方案:
原来:getView方法中如果有动态设置LayoutParams的操作,那么不能new 一个新的LayoutParams,而应该调用getLayoutParams获取已有的LayoutParams,并设置,是这里错了;修改后,问题解决。修改后代码:
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(c).inflate(R.layout.img_gv,
parent, false);
holder.img = (ImageView) convertView.findViewById(R.id.img);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (wh != 0) {
LayoutParams param= convertView.getLayoutParams();
param.height=wh;
param.width=wh;
convertView.setLayoutParams(param);
}
final String item = list.get(position);
Glide.with(c).load(item).placeholder(R.drawable.pic_default)
.error(R.drawable.pic_no_default).into(holder.img);
return convertView;
这篇关于GridView动态设置Item的宽高 第一个Item显示不正常的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!