自定义Adapter中getView( )中使用View.setTag()和不使用的区别。

首先来看使用Tag的情况。

@Override
	public View getView(int position, View view, ViewGroup group) {
		ViewHolder holder = new ViewHolder();
		if(view==null){
			view = inflater.inflate(R.layout.note_list_item, null);//加载列表项的布局文件.
			holder.title = (TextView)view.findViewById(R.id.note_title);
			holder.createtime = (TextView)view.findViewById(R.id.note_createtime);
			holder.clock = (ImageView)view.findViewById(R.id.note_clock);
			view.setTag(holder);	//将view和holder进行绑定
		}else{
			holder = (ViewHolder)view.getTag();
		}
		String title = items.get(position);
		title = title.length()>10 ? title.substring(0, 10)+"..." : title;
		holder.title.setText(title);
		holder.createtime.setText(times.get(position));
	}
可以看到,本例使用了一个特别的ViewHolder类对组件进行保存。

private class ViewHolder{
private TextView title;
private TextView createtime;
private ImageView clock;
}

再来看下不使用Tag的情况:

 @Override                

@Override                
public View getView(int position, View convertView, ViewGroup parent) {                      
  if(convertView == null) {                               
    convertView = mInflater.inflate(R.layout.multiple_checkbox_main_row, null);                      
  }                        
    TextView tN = (TextView) convertView.findViewById(R.id.multiple_title); 
    tN.setText((String)mList.get(position).get(NAME));
    TextView tP = (TextView) convertView.findViewById(R.id.multiple_summary);                       
    tP.setText((String)mList.get(position).get(PHONE_NUMBER));
}
可以发现不使用Tag获取View时每次都会调用View.findViewById(XXX)方法。

而使用Tag的时候由于控件已经保存到了Tag中所以不必再调用View.findViewById(XXX)方法。

Tag相当于一个缓存的作用,从而提升了程序的性能。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------分隔线 2014/12/4

getView()中的参数convertView什么时候才不为null呢。

经过试验,第一次加载ListView的时候convertView都是为空的。

只有当ListView中的item加载过之后隐藏(上下滑动在屏幕中隐藏)之后再重新显示的时候,convertView才不为null。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值