BRVAH(BaseRecyclerViewAdapterHelper)多樣式的使用

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

不得不說BRVAH真的算是一個很不錯Recyclerview的adapter

裏面用到了一些封裝的方法,很好,雖然有些還沒用過,但是用過的都說好

網上教程很多,尤其是 官方指南 教程寫的更是全面,大多數常用都可以在裏面找到

下面直接寫我實現的功能
注意是一個RecyclerView實現!!!
注意是一個RecyclerView實現!!!
注意是一個RecyclerView實現!!!

在這裏插入圖片描述
實現方式大概有幾種,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<LibraryBean.ListBean, BaseViewHolder> {

    private int size;

    public LibraryAdapter(@Nullable List<LibraryBean.ListBean> data, int size) {
        super(data);
        this.size = size;
        //這裏獲取Type類型
        setMultiTypeDelegate(new MultiTypeDelegate<LibraryBean.ListBean>() {
            @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;
                }
            }
        });
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章