您的位置:首页 > 移动开发 > Android开发

Android之ListView的优化

2014-04-28 16:44 274 查看
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()方法多次使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: