通用型ViewHolder
private SparseArray mViews;
用来存储listviewitem布局文件的控件的容器 是一个Map形式,
比Map效率高, SpareArray
put(int, view);
第一次由于直接将容器最终化,大致listView布局显示内容出现问题
package com.chb.beautifalGrils.app.adapter;
import javax.crypto.spec.PSource;
import com.chb.beautifalGrils.R;
import android.content.Context;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* 万能适配器的ViewHolder
* @author chb
*
*/
public class MagicViewHolder {
private SparseArray<View> mViews;
/**
* 复用性的convertView
*/
private View convertView;
private int position;
private MagicViewHolder(Context mContext, ViewGroup parent, int layoutId, int position) {
this.convertView = LayoutInflater.from(mContext).inflate(layoutId, parent, false);
this.position = position;
this.mViews = new SparseArray<View>();
this.convertView .setTag(this);
}
/**
* 获取MagicViewHolder对象
* @return
*/
public static MagicViewHolder getMagicViewHolder(Context mContext, View convertView, ViewGroup parent, int layoutId, int position) {
if(convertView == null){
return new MagicViewHolder(mContext, parent, layoutId, position);
}else {
MagicViewHolder magicViewHolder = (MagicViewHolder) convertView.getTag();
magicViewHolder.position = position;//convertView是复用的, position是更新的
return magicViewHolder;
}
}
/**
* 获取item中的控件
* @param viewId
*/
public View getView(int viewId){
View view = mViews.get(viewId);
if(view == null){
view = convertView.findViewById(viewId);
mViews.put(viewId, view);
}
return view;
}
/**
* 获取复用的
* @return
*/
public View getConvertView() {
return convertView;
}
/**
*
* @return
*/
public int getPosition() {
return position;
}
}
通用适配器
package com.chb.beautifalGrils.app.adapter;
import java.util.List;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
public abstract class CommonAdapter<T extends Bean> extends BaseAdapter {
/**
* 数据源
*/
private List<T> datas;
/**
* item布局id
*/
private int layoutId;
/*
* 上下文
*/
private Context mContext;
public CommonAdapter(List<T> datas, int layoutId, Context mContext) {
this.datas = datas;
this.layoutId = layoutId;
this.mContext = mContext;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return datas.size();
}
@Override
public Object getItem(int paramInt) {
// TODO Auto-generated method stub
return datas.get(paramInt);
}
@Override
public long getItemId(int paramInt) {
// TODO Auto-generated method stub
return paramInt;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MagicViewHolder magicViewHolder = MagicViewHolder.getMagicViewHolder(mContext, convertView, parent, layoutId, position);
doView(magicViewHolder, position);
return magicViewHolder.getConvertView();
}
/**
* 对item中的布局控件设置赋值
* @param position
* @param magicViewHolder
*/
protected abstract void doView(MagicViewHolder magicViewHolder, int position);
}