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