做个笔记,Adapter的使用模板。
在Android中Adapter使用十分广泛,特别是在list中。所以adapter是数据的“集散地”,所以对其进行内存优化是很有必要的。下面算是一个标准的使用模板:主要使用convertView和ViewHolder来进行缓存处理
(注:以前在使用adapter的时候从来都不定义ViewHolder,一直都是直接对convertView进行加载,今后用到adapter时,尽量采用以下模板实现)
具体的实现运行大家自己动手完成就OK(So easy的事吧)!
package com.weiwend.selected;
import com.weiwend.wj.testactivity.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class adapter extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
public adapter(Context context) {
super();
this.context = context;
inflater=LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder vHolder=null;
// 如果convertView对象为空,则创建新对象,不为空则复用
if(convertView==null){
//创建ViewHolder对象
vHolder=new ViewHolder();
convertView=inflater.inflate(R.layout.item_list, <span style="color:#ff0000;">null</span>);
vHolder.img=(ImageView) convertView.findViewById(R.id.iv);
vHolder.tv=(TextView) convertView.findViewById(R.id.tv);
//将ViewHolder保存到Tag中(Tag中可以保存Object类型数据,所以任何东西都可以保存在Tag中)
convertView.setTag(vHolder);
}else{
//当convertView不为空时,通过getTag()得到view
vHolder=(ViewHolder) convertView.getTag();
}
//给对象赋值,修改显示的值
vHolder.img.setBackgroundResource(...);
vHolder.tv.setText(...);
return convertView;
}
//将显示的View包装成类
static class ViewHolder{
TextView tv;
ImageView img;
}
}