Android之ListView的优化

来源:互联网 发布:floyd算法求最短路径 编辑:程序博客网 时间:2024/05/22 06:30

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
原创粉丝点击