程序员

MultiTypeAdapter(仿淘宝购物车)

2019-12-20  本文已影响0人  小耗子_20da

RecyclerView与DataBinding封装

以购物车为例

1、创建一个类,并继承MultiTypeAdapter

当然也可以创建自己的ViewHolder

/**
 * 多类型viewType
 * 1、每种类型必须有对应的javabean,且必须实现RecyclerData接口,返回值可以不连续,但是必须不同;
 * 2、getLayoutRes(int viewType)必须返回对应的layout id;
 * 3、onBindViewHolder()方法中也必须将viewdatabinding这强转成对应的子类,数据也需要强转
 * 4、如果没有重写onCreateViewHolder()方法,则创建ViewHolder;
 * 5、注释部分是使用自定义的ViewHolder
 */
public class ShoppingTrolleyAdapter extends MultiTypeAdapter {

    /**
     * 绑定数据到View中
     * <p>
     * 可以使用getItemViewType(position)获取对应的viewType
     *
     * @param position
     * @param viewHolder
     */
    @Override
    protected void onBindViewHolder(int position, ViewHolder viewHolder) {
        switch (getItemViewType(position)) {
            case 0:
                ((ItemTopBinding) viewHolder.getBinding()).setGoodsTop((GoodsTopInfo) getDataList().get(position));
                break;
            case 1:
                ((ItemCentreBinding) viewHolder.getBinding()).setGoodsCenter((GoodsCentreInfo) getDataList().get(position));
                break;
            case 2:
                ((ItemBottomBinding) viewHolder.getBinding()).setGoodsBottom((GoodsBottomInfo) getDataList().get(position));
                break;
        }
    }

    /**
     * 获取每种viewType对应的layout文件
     *
     * @param viewType 即RecyclerData中get_RV_ItemViewType()的返回值
     * @return
     */
    @Override
    protected int getLayoutRes(int viewType) {
        switch (viewType) {
            case 0:
                return R.layout.item_top;
            case 1:
                return R.layout.item_centre;
            case 2:
                return R.layout.item_bottom;
        }
        return -1;
    }
}

2、实例化对象并设置点击事件

mShoppingTrolleyAdapter = new ShoppingTrolleyAdapter();

3、为RecyclerView设置Adapter

mRecyclerView.setAdapter(mShoppingTrolleyAdapter);

4、刷新或写入数据

注意:必须在mRecyclerView.setAdapter(mFriendAdapter);才能写入数据

mShoppingTrolleyAdapter.refresh(data);
上一篇 下一篇

猜你喜欢

热点阅读