RecyclerView分组加载不同类型Item布局

作者: 曾经的追风少年 | 来源:发表于2016-12-30 11:02 被阅读1849次

先看效果图:


RecyclerView分组加载效果图.png

在开发中,经常会遇到分组的菜单页面,我们可以通过在布局中自定义组合控件来实现,这里我通过RecyclerView分组加载不同item布局来实现。

原理

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方法的第二个参数viewType,我们可以根据viewType的值,来加载不同的布局。
怎么获取viewType的值,在RecyclerView.Adapter中有这样一个方法:

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

我们需要重写getItemViewType方法,根据自设的item类型来返回不同的值,在根据返回的viewType值来加载相对应的item布局。

2、在Activity中

在给RecyclerView设置manager时,我们设置GridLayoutManager:

GridLayoutManager manager = new GridLayoutManager(this,line_count);

line_count是设置的菜单一行显示几个item,我们计划分组类别一行显示一个,manager 如下设置,根据item的类别来获取每行显示的数量:

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设置LayoutManager和Adapter之后就可以运行显示了。

注意

RecyclerView在adapter的onBindViewHolder方法中动态设置item的高度,否则容易充满屏幕。

相关文章

网友评论

    本文标题:RecyclerView分组加载不同类型Item布局

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