问题:
最近在项目中遇到一个很奇怪的问题,在做一种类似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;