Android BaseAdapter使用及listview优化

来源:互联网 发布:淘宝卖家发微淘在哪儿 编辑:程序博客网 时间:2024/05/04 21:53
public class PurchaseAdapter extends BaseAdapter{private LayoutInflater inflater=null;private List<HashMap<String,Object>> mlist=null;private HashMap<String,Object> mMap=null;public PurchaseAdapter(Context context,List<HashMap<String,Object>> list) {inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);this.mlist=list;}@Overridepublic int getCount() {return mlist.size();}@Overridepublic Object getItem(int position) {return mlist.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder=null;if(convertView==null){convertView=inflater.inflate(R.layout.activity_shipping_address_list_item, null);holder=new ViewHolder();holder.tv_username=(TextView) convertView.findViewById(R.id.activity_shipping_address_list_username);holder.tv_address_district=(TextView) convertView.findViewById(R.id.activity_shipping_address_list_address_district);holder.tv_address_details=(TextView) convertView.findViewById(R.id.activity_shipping_address_list_address_detail);convertView.setTag(holder);}else{holder=(ViewHolder) convertView.getTag();}mMap=(HashMap<String,Object>) mlist.get(position);holder.tv_username.setText(mMap.get("user_name").toString());holder.tv_address_district.setText(mMap.get("address_district").toString());holder.tv_address_details.setText(mMap.get("address_details").toString());return convertView;}static class ViewHolder{TextView tv_username; //收货人真实姓名TextView tv_address_district; //收获地址(太原市杏花岭区)TextView tv_address_details; //收获详细地址(北大街88号2号楼502)}}

使用静态的ViewHoulder的目的则是节省了findViewById的时间。如果不使用ViewHolder,每次getView的时候都需要得到一次子布局,而这也是很耗时并且耗资源的;如果使用了ViewHolder作为子布局的缓存,使用View的setTag方法将缓存与每个item绑定,则也可以省去了findViewById的事件;而将ViewHolder设置为static的目的是指在初始化Adapter时初始化一次这个内部类,否则将会在每次创建Adapter时都要初始化一次,而这是没有必要的。

0 0
原创粉丝点击