public class ViewHolder {
private SparseArray<View> mViews;
private int mPosition;
private View mConvertView;
public ViewHolder(Context context, ViewGroup parent,int layoutId,int position){
this.mPosition = position;
this.mViews = new SparseArray<View>();
mConvertView = LayoutInflater.from(context).inflate(R.layout.item_listview,parent,false);
mConvertView.setTag(this);
}
public static ViewHolder get(Context context,View converView,ViewGroup parent,int layoutId,int position){
if(converView==null){
return new ViewHolder(context,parent,layoutId,position);
}else {
ViewHolder holder = (ViewHolder) converView.getTag();
holder.mPosition = position;
return holder;
}
}
public View getConvertView() {
return mConvertView;
}
/**
* 通过ViewId 获取控件
* @param viewId
* @param <T>
* @return
*/
public <T extends View> T getView(int viewId){
View view = mViews.get(viewId);
if(view==null){
view = mConvertView.findViewById(viewId);
mViews.put(viewId,view);
}
return (T) view;
}
}
Adapter 中调用Viewholder
public class MyAdapterWithCommonAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private List<Bean> mDatas;
private Context mcontext;
public MyAdapterWithCommonAdapter(Context context, List<Bean> datas) {
mInflater = LayoutInflater.from(context);
mDatas = datas;
mcontext = context;
}
@Override
public int getCount() {
return mDatas.size();
}
@Override
public Object getItem(int position) {
return mDatas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = ViewHolder.get(mcontext,convertView,parent,R.layout.item_listview,position);
Bean bean =mDatas.get(position);
((TextView)(holder.getView(R.id.id_title))).setText(bean.getTitle());
((TextView)(holder.getView(R.id.id_desc))).setText(bean.getDesc());
((TextView)(holder.getView(R.id.id_time))).setText(bean.getTime());
((TextView)(holder.getView(R.id.id_phone))).setText(bean.getPhone());
return holder.getConvertView();
}
}
commonAdapter的编写
public abstract class CommonAdapter<T> extends BaseAdapter {
protected Context mContext;
protected List<T> mdatas;
protected LayoutInflater mInflater;
public CommonAdapter(Context context, List<T> datas){
mContext = context;
mdatas = datas;
mInflater.from(context);
}
@Override
public int getCount() {
return mdatas.size();
}
@Override
public Object getItem(int position) {
return mdatas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public abstract View getView(int position, View convertView, ViewGroup parent);
}