有種需求,在點(diǎn)擊按鈕的時(shí)候,改變RecyclerView的列數(shù)以及布局栅表。
如果用的RecyclerView.Adapter適配器,用getItemViewType就可以做践美,但是項(xiàng)目中,用的是BaseQuickAdapter许布。
查找資料蜜唾,發(fā)現(xiàn)可以改為BaseMultiItemQuickAdapter實(shí)現(xiàn)多布局袁余。
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;
}
}
}
這樣做的關(guān)鍵是,在GoodsBean 里面夺刑,有一個(gè)itemType參數(shù)遍愿,通過itemType值的不同沼填,設(shè)置不同的布局坞笙。
所以在點(diǎn)擊按鈕的時(shí)候
case R.id.tv_preview_type:
setLayoutManager();
更改sapncount以及itemType薛夜,再setNewData更新數(shù)據(jù)即可梯澜。
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);//設(shè)置itemType吮龄,在GoodsItemAdapter里選擇布局
}
mGoodsItemAdapter.setNewData(mGoodsItemAdapter.getData());
}
注意母债,item.setItemType(itemType);的前提是场斑,GoodsSearchVO.GoodsBean要implements MultiItemEntity,并且重寫
@Override
public int getItemType() {
return itemType;
}