BaseMultiItemQuickAdapter实现多布局

有种需求,在点击按钮的时候,改变RecyclerView的列数以及布局。


1111.png
22222.png

如果用的RecyclerView.Adapter适配器,用getItemViewType就可以做,但是项目中,用的是BaseQuickAdapter。
查找资料,发现可以改为BaseMultiItemQuickAdapter实现多布局。
class GoodsItemAdapter extends BaseMultiItemQuickAdapter<GoodsSearchVO.GoodsBean, BaseViewHolderExt> {
在GoodsItemAdapter 里

public GoodsItemAdapter(List<GoodsSearchVO.GoodsBean> data) {
            super(data);
            addItemType(1, R.layout.fragment_goods_search_list_item);
            addItemType(2, R.layout.fragment_goods_search_list_item_single);
}

然后在convert里,配置不同的布局。

@Override
        protected void convert(@NonNull BaseViewHolderExt helper, GoodsSearchVO.GoodsBean item) {
        switch (helper.getItemViewType()) {
            case 1:
                helper.setText(R.id.tv_item_smart_refresh, item.getName());
                GlideApp.with(mContext).load(item.getBgPicture()).into((ImageView) helper.getView(R.id.iv_item_smart_refresh));
                break;
            case 2:
                helper.setText(R.id.tv_item_smart_refresh_2, item.getName());
                break;
        }
    }
}

这样做的关键是,在GoodsBean 里面,有一个itemType参数,通过itemType值的不同,设置不同的布局。
所以在点击按钮的时候

case R.id.tv_preview_type:
                setLayoutManager();

更改sapncount以及itemType,再setNewData更新数据即可。

public void setLayoutManager(){
        itemType = itemType == ITEM_DOUBLE ? ITEM_SINGLE:ITEM_DOUBLE;

        switch (itemType){
            case ITEM_DOUBLE :
                mGoodsListRV.setLayoutManager(new GridLayoutManager(getContext(), 2));
            break;
            case ITEM_SINGLE :
                mGoodsListRV.setLayoutManager(new GridLayoutManager(getContext(), 1));
            break;
        }
        for(GoodsSearchVO.GoodsBean item :mGoodsItemAdapter.getData()){
            item.setItemType(itemType);//设置itemType,在GoodsItemAdapter里选择布局
        }
        mGoodsItemAdapter.setNewData(mGoodsItemAdapter.getData());
    }

注意,item.setItemType(itemType);的前提是,GoodsSearchVO.GoodsBean要implements MultiItemEntity,并且重写

@Override
        public int getItemType() {
            return itemType;
        }

参考资料:万能适配器BaseQuickAdapter多布局的用法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容