BRVAH(BaseRecyclerViewAdapterHelper)多样式的使用

这篇文章需要BRVAH的基础,不是教程,只是提供方案和思路

不得不说BRVAH真的算是一个很不错Recyclerview的adapter

里面用到了一些封装的方法,很好,虽然有些还没用过,但是用过的都说好

网上教程很多,尤其是 官方指南 教程写的更是全面,大多数常用都可以在里面找到

下面直接写我实现的功能
注意是一个RecyclerView实现!!!
注意是一个RecyclerView实现!!!
注意是一个RecyclerView实现!!!

BRVAH(BaseRecyclerViewAdapterHelper)多样式的使用_第1张图片
实现方式大概有几种,Recyclerview嵌套是最方便的,如果这样的话,大概我也就不写这篇文章了

现在实现方式打算采用一个RecyclerView实现,先观察上图,实际上有三种Type,(贡献排行算是一种)采用传统的Adapter我们需要自己定义Type,然后去根据不同Type bind不同的layout,下面写一下如何通过Brvah实现

里面用到了一个设置不同Type的方式 多布局代理, GitHub多种布局代理 详情移步这里

一:数据实体

public class LibraryBean {

public static final int Type_Book = 1;//图书

public static final int Type_Rank = 2;//排行

public static final int Type_Header = 3;//分割线

...................//省略数据

}

我们需要自己定义Type,这样我们的Adapter才能type-----layout对应上

二:Adapter

public class LibraryAdapter extends BaseQuickAdapter {

    private int size;

    public LibraryAdapter(@Nullable List data, int size) {
        super(data);
        this.size = size;
        //这里获取Type类型
        setMultiTypeDelegate(new MultiTypeDelegate() {
            @Override
            protected int getItemType(LibraryBean.ListBean listBean) {
                return listBean.getItemType();
            }
        });
        //这里添加Type类型
        getMultiTypeDelegate().registerItemType(LibraryBean.Type_Book, R.layout.item_book)
                .registerItemType(LibraryBean.Type_Rank, R.layout.item_rank)
                .registerItemType(LibraryBean.Type_Header, R.layout.header_view);
    }

    @Override
    protected void convert(BaseViewHolder helper, LibraryBean.ListBean item) {
		//获取Type类型
        switch (helper.getItemViewType()) {
            case LibraryBean.Type_Book:
            	//填充书籍数据
                initBook(helper, item);
                break;
            case LibraryBean.Type_Rank:
            	//填充排行数据
                initRank(helper, item);
                break;
            case LibraryBean.Type_Header:
            	//填充分割线
                break;
        }
    }
  }

上面的注释写的相对来说比较详细了…

三:1/1和1/2显示处理

网上这方面的教程还是比较详细的…一搜一大把,毕竟这不是重点

		..................省略数据
		 final GridLayoutManager manager = new GridLayoutManager(this, 2);
        recyclerView.setLayoutManager(manager);
	  LibraryAdapter libraryAdapter = new LibraryAdapter(list, size);
        libraryAdapter.setSpanSizeLookup(new BaseQuickAdapter.SpanSizeLookup() {
            @Override
            public int getSpanSize(GridLayoutManager gridLayoutManager, int position) {
            	//是1/2 和1/1的区别  占一行 还是1/2
                return list.get(position).getItemType() == LibraryBean.Type_Book ? 1 : 2;
            }
        });
        recyclerView.setAdapter(libraryAdapter);
        //分割线
        recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
            @Override
            public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
                super.getItemOffsets(outRect, view, parent, state);
                GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams) view.getLayoutParams();
                int spanSize = layoutParams.getSpanSize();
                int spanIndex = layoutParams.getSpanIndex();
                if (spanSize == manager.getSpanCount()) {
                    outRect.top = 20;
                }
            }
        });

你可能感兴趣的:(android,brvah,adapter)