美文网首页
Android 通用数据适配器类

Android 通用数据适配器类

作者: 只取一勺 | 来源:发表于2018-08-30 15:40 被阅读0次

对系统的BaseAdapter进一步抽象和封装:


  1. 通用数据适配器类
/***********
 * @Author rape flower
 * @Date 2017-12-04 16:48
 * @Describe 通用数据适配器类
 */
public abstract class AbstractBaseAdapter<T> extends BaseAdapter {
    protected Context mContext;
    protected List<T> mData;
    protected LayoutInflater mInflater;

    public AbstractBaseAdapter(Context context, List<T> data) {
        this.mContext = context;
        mInflater = LayoutInflater.from(context);
        this.mData = data;
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        AbstractViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(onBindLayout(), parent, false);
            holder = onCreateViewHolder();
            if (holder == null) {
                throw new NullPointerException("The view holder object is null, you must instance view holder.");
            }
            holder.initWidget(convertView);
            convertView.setTag(holder);
        } else {
            holder = (AbstractViewHolder) convertView.getTag();
        }
        onBindViewHolder(holder, getItem(position), position);
        return convertView;
    }

    public void setVisible(View view) {
        if (view == null) return;

        if (view.getVisibility() == View.GONE || view.getVisibility() == View.INVISIBLE) {
            view.setVisibility(View.VISIBLE);
        }
    }

    public void setGone(View view) {
        if (view == null) return;

        if (view.getVisibility() == View.VISIBLE) {
            view.setVisibility(View.GONE);
        }
    }

    public void setInvisible(View view) {
        if (view == null) return;

        if (view.getVisibility() == View.VISIBLE) {
            view.setVisibility(View.INVISIBLE);
        }
    }

    public abstract int onBindLayout();

    public abstract void onBindViewHolder(AbstractViewHolder holder, T data, int position);

    public abstract AbstractViewHolder onCreateViewHolder();
}
  1. ViewHolder基类
/***********
 * @Author rape flower
 * @Date 2017-12-04 16:48
 * @Describe 所有自定义的View Holder需要继承自此ViewHolder
 */
public abstract class AbstractViewHolder {

    public abstract void initWidget(View view);
}
  1. 使用


public class GoodsStockAdapter extends AbstractBaseAdapter<Goods> {

    public GoodsStockAdapter(Context context, List<Goods> data) {
        super(context, data);
    }

    @Override
    public int onBindLayout() {
        return R.layout.item_goods_stock;
    }

    @Override
    public void onBindViewHolder(AbstractViewHolder holder, Goods data, int position) {
        GoodsStockHolder goodsStockHolder = (GoodsStockHolder) holder;
        goodsStockHolder.tvGoodsName.setText(data.getGoodsName());

        goodsStockHolder.tvTobePurchased.setText(data.getGoodsTobePurchasedNumber()+"");
        goodsStockHolder.tvPurchased.setText(data.getGoodsPurchasedNumber()+"");
        goodsStockHolder.tvSold.setText(data.getGoodsSoldNumber()+"");
    }

    @Override
    public AbstractViewHolder onCreateViewHolder() {
        return new GoodsStockHolder();
    }

    private class GoodsStockHolder extends AbstractViewHolder {
        TextView tvGoodsName;
        TextView tvTobePurchased;
        TextView tvPurchased;
        TextView tvSold;

        @Override
        public void initWidget(View view) {
            tvGoodsName = (TextView) view.findViewById(R.id.tv_goods_name);
            tvTobePurchased = (TextView) view.findViewById(R.id.tv_to_be_purchased);
            tvPurchased = (TextView) view.findViewById(R.id.tv_purchased);
            tvSold = (TextView) view.findViewById(R.id.tv_sold);
        }
    }
}

相关文章

网友评论

      本文标题:Android 通用数据适配器类

      本文链接:https://www.haomeiwen.com/subject/tmtdwftx.html