RecyclerView分組加載不同類型Item布局

先看效果圖:


RecyclerView分組加載效果圖.png

在開發(fā)中,經(jīng)常會(huì)遇到分組的菜單頁面,我們可以通過在布局中自定義組合控件來實(shí)現(xiàn),這里我通過RecyclerView分組加載不同item布局來實(shí)現(xiàn)。

原理

1、在adapter中

我們先看在Adapter中加載item布局的方法:

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView;
    if (viewType == 0){
        itemView = mInflater.inflate(R.layout.item_group_header,parent,false);
    }else {
        itemView = mInflater.inflate(R.layout.item_group_normal,parent,false);
    } 
   return new ViewHolder(itemView);}

onCreateViewHolder方法的第二個(gè)參數(shù)viewType,我們可以根據(jù)viewType的值,來加載不同的布局。
怎么獲取viewType的值,在RecyclerView.Adapter中有這樣一個(gè)方法:

@Override
public int getItemViewType(int position) {
    if (itemList.get(position).getType() == ItemType.ITEM_HEADER){
        return 0;
    }
    return 1;
}

我們需要重寫getItemViewType方法,根據(jù)自設(shè)的item類型來返回不同的值,在根據(jù)返回的viewType值來加載相對(duì)應(yīng)的item布局。

2、在Activity中

在給RecyclerView設(shè)置manager時(shí),我們?cè)O(shè)置GridLayoutManager:

GridLayoutManager manager = new GridLayoutManager(this,line_count);

line_count是設(shè)置的菜單一行顯示幾個(gè)item,我們計(jì)劃分組類別一行顯示一個(gè),manager 如下設(shè)置,根據(jù)item的類別來獲取每行顯示的數(shù)量:

manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
        switch (itemList.get(position).getType()){
            case ITEM_HEADER:
                return line_count;
            case ITEM_NORMAL:
                return 1;
        }
        return 0;
    }
});

給RecyclerView設(shè)置LayoutManager和Adapter之后就可以運(yùn)行顯示了。

注意

RecyclerView在adapter的onBindViewHolder方法中動(dòng)態(tài)設(shè)置item的高度,否則容易充滿屏幕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容