您的位置:首页 > 移动开发 > Android开发

仿RecycleView.Adapter封装BaseAdapter

2017-03-20 02:09 176 查看

》代码:

/**
* Created by Kvin on 2017/1/15.
*/
public abstract class BasicAdapter<V extends BasicAdapter.ViewHolder, T> extends android.widget.BaseAdapter {
protected final static String IMAGE_PREFIX = "file:///";
private List<T> list;
private Context context;
private LayoutInflater inflater;

protected OnChildClickListener mOnChildClickListener;

public BasicAdapter(List<T> list, Context context) {
this.list = list;
this.context = context;
this.inflater = LayoutInflater.from(context);
}

@Override
public int getCount() {
return list == null ? 0 : list.size();
}

@Override
public Object getItem(int position) {
return list == null ? null : list.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

/**
* v can be a view or a viewHolder
*
* @return
* @explain_1:inflater,parent,context use for inflate layout
* @explain_2:list,position use for choosing layout
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
V v;
if (convertView == null) {
convertView = getConvertView(inflater, parent, context, list, position);
v = initView(convertView, parent, context);
convertView.setTag(v);
} else {
v = (V) convertView.getTag();
}
bindData(v, position, list, context);
return convertView;
}

/**
* child view click listener
* @param mOnChildClickListener
*/
public void setOnChildClickListener(OnChildClickListener mOnChildClickListener) {
this.mOnChildClickListener = mOnChildClickListener;
}

/**
* getConvertView
*
* @param inflater
* @param parent
* @param context
* @param list
* @param position
*/
protected abstract View getConvertView(LayoutInflater inflater, ViewGroup parent, Context context, List<T> list, int position);

/**
* init view
*/
protected abstract V initView(View cv, ViewGroup parent, Context context);

/**
* bind data
*/
protected abstract void bindData(V vh, int position, List<T> list, Context context);

/**
* view holder
*/
public static class ViewHolder{

public ViewHolder(View v) {
}
}
}


》使用样式:

/**
* Created by Kvin on 2017/2/1.
*/
public class RobotAdapter extends BasicAdapter<RobotAdapter.ViewHolder, RobotBean> {

public RobotAdapter(List<RobotBean> list, Context context) {
super(list, context);
}

@Override
protected View getConvertView(LayoutInflater inflater, ViewGroup parent, Context context, List<RobotBean> list, int position) {
return inflater.inflate(R.layout.adapter_robot, parent, false);
}

@Override
protected ViewHolder initView(View cv, ViewGroup parent, Context context) {
return new ViewHolder(cv);
}

@Override
protected void bindData(ViewHolder vh, int position, List<RobotBean> list, Context context) {
RobotBean bean = list.get(position);
ImageLoader.getInstance().displayImage(bean.getIcon(), vh.iconIv);
vh.nameTv.setText(bean.getName());
}

static class ViewHolder extends BasicAdapter.ViewHolder {
ImageView iconIv;
TextView nameTv;

public ViewHolder(View v) {
super(v);
iconIv = (ImageView) v.findViewById(R.id.icon_iv);
nameTv = (TextView) v.findViewById(R.id.name_tv);

}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息