istview优化带来的view重用怎么解决

自定义适配器优化:

1)自定义布局中控件的高度绝对不能是内容包裹 wrap_content ,应该是匹配父控件或者指定具体的高度。否则在android代码中会测l量该控件的高度,多次调用getView()。

2)利用convertview的重用,判断是否为空, 只有当convertView为空的时候,才去用填充器填充视图 ,如果不为空,则重用该view。因为填充是非常耗时的操作,因为要解析xml文件。

public View getView(int position, View convertView, ViewGroup parent)

{

View v;

if (convertView == null) 

{

v = LayoutInflater.from(getApplicationContext()).inflate(
R.layout.item, parent, false);

else 

{

v = convertView;
}
return v;

}


3)使用自定义内部类保存控件的引用,可以 防止图片错误 和优化findviewbyid()。

public static class ViewHolder 

{

public TextView tv;
public ImageView iv;
public int position;
}

if (convertView == null) 

{

v = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item, parent, false);
//优化第三步
//利用ViewHolder保存控件的引用
// 因为不论何时,在同一个ViewGroup中findViewById()去找 , 同一个控件,找到的对象是同一个。
ViewHolder vh = new ViewHolder();
vh.tv = (TextView) v.findViewById(R.id.text);
vh.iv = (ImageView) v.findViewById(R.id.img);
v.setTag(vh);

else 

{

v = convertView;
}
ViewHolder vh = (ViewHolder) v.getTag();

所以不应该在if语句外findViewById(),那样会多次执行不必要的find。


4)防止图片错位,因为多线程中,图片下载的事件不确定,当图片下载没完成时用户把屏幕滑动出去,而且因为convertview重用,所以有可能其他位置已经改变了该convertview的属性,如位置等。然后下载完的内容就放在了错误的位置。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值