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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值