Android之ListView的优化

ListView是Android的一个常用的控件,用俩显示多行数据,

最基本的用法就是,得到了ListVIew对象后,用setAdapte()方法去给ListView填充数据.

Adapter有很多,有ArrayAdapter 只能显示一行TextView .,SImpleAdapter有很好的拓展性,大部分的情况下都是继承SimpleAdapter来拓展ListView的内容.

SimpleCursorAdapter就类似SImpleAdapter和数据库的结合.

当系统需要绘制ListView的时候,会首先调用Adapter中的getCount()方法来得到列表的长度,然后开始绘制第一行,绘制的时候调用getView()方法来取得需要显示的View,

绘完到屏幕可见的item的之后,把其他的就存放在Recyled里,把可以显示的才存放在内存里.

当一个item因为滑动变成不可见时,这个item会作为会作为一个参数传递给getView(),作为一个新的可见的convertView而循环使用

class MyAdapter extends SimpleAdapter{
	public View getView(int position,View convertView,ViewGroup parent) 
	{
		View view=convertView; 
		ViewHolder holder; 
		if(view==null){
			view=LayoutInflater.from(context).inflate(R.layout.section_list_item1,null); 
			holder=new ViewHolder(); 
			holder.tv_name=(TextView)view.findViewById(R.id.contact_contactinfoitem_tv_name); 
			holder.tv_phone=(TextView)view.findViewById(R.id.contact_contactinfoitem_tv_phoneNum); 
			view.setTag(holder); 
		}else{ 
			holder=(ViewHolder)view.getTag(); 
		} 
		ContactInfo info=contacts.get(position); 
		if(info!=null){
			holder.tv_name.setText(info.getContactName()); 
			holder.tv_phone.setText(info.getContact_Phone()); 
		} 
		return view; 
	}
	
	public int getCount(){
		return 0;
	}
	
	static class ViewHolder 
	{ 
		TextView tv_name,tv_phone;
	} 
}

1.首先判断这个convertView是不是为null,如果为null的话用LayoutInflater去加载一个,

2.convertView的目的在于循环使用,避免每次都要去加载一个layout. 节省内存.

3.使用ViewHolder是保证不用每次都要findViewById()来获得控件的对象.

4.使用一个静态的ViewHolder是Java的编程规范,

5.VIew.setTag()方法可以把View保存起来,以后用getTag()方法多次使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值