仿RecycleView.Adapter封裝BaseAdapter

》代碼:

/**
 * 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);

        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章