ByRecyclerView 是主要是爲了解決XRecyclerView和BRVAH其中的問題而產生的RecyclerView開源庫。java
它其中的功能有:自帶下拉刷新或結合SwipeRefreshLayout、觸底加載更多、添加/移除多個HeaderView/FooterView、狀態佈局StateView、點擊/長按事件、萬能分割線、優化過的極簡Adapter(databinding)等。android
本庫已經更新了16個版本了,發佈了近四個月,如今的功能都是剛需,已知足基本的項目需求,後續會一直維護下去增長更多的功能。但願能幫助到以前和我同一境遇的人,還請你們多多支持。git
GitHub地址: ByRecyclerView,歡迎Star
文章目錄github
好久以前一直用的是XRecyclerView
,此庫能夠進行下拉刷新和加載更多,可是有不少致命的問題,例如:maven
SwipeRefreshLayout
,會有滑動衝突問題。CoordinatorLayout
+ AppBarLayout
中使用(做者後期已經修復,可是因爲項目是拷貝的因此不便更新維護)。爲了解決上面的問題,我在項目中處處打補丁,可是治標不治本,致使我不得不選擇新的RecyclerView庫來知足個人業務需求。
因而看中了萬衆矚目的BaseRecyclerViewAdapterHelper
,這個現有18.7k star的開源庫。ide
BRVAH 幾乎能夠解決上面全部的問題,而且使用簡單,我在公司新項目中使用了它,可是不久我就遇到了新的問題:佈局
1.addHeaderView()是在一個item中操做的,致使我不能順利使用錨點(滑動時,經過定位第一個item的位置來更改指示器)。若是使用多類型item會複雜不少,我須要對數據實現對應的多類型接口來達到目的。優化
-動畫
所見即所得
,不要亂替我執行動做行爲。查看這位無奈的開發,項目裏提的issue不少是關於這部分的。前兩個應該是此庫比較大的兩個槽點,致使我使用起來仍是不那麼趁心如意。固然此庫絕大部分的功能都是好用的。
因而就有了ByRecyclerView
,它基本解決了上面的全部問題:
SwipeRefreshLayout
使用ByRecyclerView
與Adapter
分離,意味着開發者以前使用自定義的BaseAdapter
,會無縫銜接ByRecyclerView
,徹底可替換XRecyclerView
,只需更換少許方法。databinding
的BaseBindingAdapter
(ListView的adapter也有)AndroidX
和Support
包引入ByRecyclerView | BRVAH | XRecyclerView | |
---|---|---|---|
下拉刷新佈局 | 繼承基類自定義佈局 | 無 | 只能簡單設置樣式 |
SwipeRefreshLayout | 可配合使用 | 可配合使用 | 不能使用 |
加載更多佈局 | 繼承基類自定義佈局 | 繼承基類設置簡單佈局 | 繼承基類自定義類 |
加載更多機制 | 不足一屏上拉加載,超事後觸底加載 | 不足一屏即加載 | 觸底加載 |
HeaderView | 多ViewType區別 | 同一個item | 多ViewType區別 |
FooterView | 同一個item | 同一個item | 不能添加 |
EmptyView | 可設置 | 可設置 | 不能設置 |
點擊/長按事件 | 有 | 有 | 無 |
ByRecyclerView 是XRecyclerView的拓展,可徹底替換XRecyclerView,對於BRVAH它的優點在於四點:
缺點是尚未BRVAH裏的部分功能,好比分組adapter、DiffUtils、item擴展動畫...後期會逐步完善。
下載試用
刷新操做 | 設置狀態佈局 |
---|---|
![]() |
![]() |
多類型列表(線性/宮格/瀑布流) | 分割線(線性/宮格/瀑布流) |
---|---|
![]() |
![]() |
allprojects { repositories { ... maven { url "https://jitpack.io" } } }
dependencies { implementation 'com.github.youlookwhat:ByRecyclerView:1.0.9' // AndroidX版本引入 implementation "com.github.youlookwhat:ByRecyclerView:1.0.9-support" // support版本引入 }
<me.jingbin.library.ByRecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" tools:layoutManager="LinearLayoutManager" tools:listitem="@layout/item_home" />
mAdapter = new OneTypeAdapter(list); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mRecyclerView.setAdapter(mAdapter); public class OneTypeAdapter extends BaseRecyclerAdapter<String> { public OneTypeAdapter(List<String> data) { super(R.layout.item_main, data); } @Override protected void bindView(BaseByViewHolder<String> holder, String bean, int position) { holder.setText(R.id.view_bottom, bean); } } mAdapter.setNewData(list); // 設置第一頁數據
// 下拉刷新監聽 mRecyclerView.setOnRefreshListener(new ByRecyclerView.OnRefreshListener() { @Override public void onRefresh() { // 刷新完成 mRecyclerView.setRefreshing(false); } }); // 加載更多監聽 mRecyclerView.setOnLoadMoreListener(new ByRecyclerView.OnLoadMoreListener() { @Override public void onLoadMore() { mAdapter.addData(list); // 設置及刷新數據 mRecyclerView.loadMoreComplete(); // 加載更多完成 mRecyclerView.loadMoreEnd(); // 沒有更多內容了 mRecyclerView.loadMoreFail(); // 加載更多失敗 } });
Wiki目錄:
1 引入及極速設置 - 1.1 引入 - 1.2 極速設置 2 ByRecyclerView - 2.1 使用自帶下拉刷新 - 2.2 使用加載更多 - 2.3 添加item點擊事件 - 2.4 添加item長按事件 - 2.5 addHeaderView(多type) - 2.6 addFooterView - 2.7 setStateView(多種狀態) - 2.8 設置不滿一屏不加載 - 2.9 設置加載更多底部間距 - 2.10 自定義下拉刷新佈局 - 2.11 自定義加載更多佈局 - 2.12 添加子View的點擊事件 - 2.13 添加子View的長按事件 3 Adapter - 3.1 單類型列表 - 3.2 單類型列表(databinding) - 3.3 多類型列表實現 4 ItemDecoration - 4.1 給線性佈局設置分割線 - 4.2 給宮格/瀑布流設置分割線
ByRecyclerView借鑑了XRecyclerView下拉刷新、加載更多邏輯;BaseViewHolder及FooterView部分借鑑了BaseRecyclerViewAdapterHelper的BaseHolder,很是感謝!
你們有任何問題能夠直接提Issues,也能夠加入到答疑羣:831860628,我會第一時間幫助你們解決。若是此庫幫助到了你,還請給個Star、Fork、Follow,很是感謝😁。