TRecyclerView
由于項(xiàng)目需求,很多地方使用了大量的多類型item,就做了下封裝,感覺再怎么封裝依舊不是很完美,于是搗鼓搗鼓,自己弄了套刷新庫(kù),主要是整合了針對(duì)單類型,多類型的item開發(fā),支持下拉刷新,加載更多功能的TRecyclerView,旨意在于讓開發(fā)者只關(guān)心ViewHolder的開發(fā),高復(fù)用,TRecyclerView(面向ViewHolder開發(fā)的刷新庫(kù),多類型item終結(jié)者,好不好用你試試就知道)
主要功能
- 下拉刷新、加載更多;
- 自定義下拉動(dòng)畫;
- 高復(fù)用,支持多類型;
- ...
項(xiàng)目github地址:https://github.com/SelfZhangTQ/TRecyclerView
效果圖








使用步驟
Gradle
Step 1. 在你的根build.gradle文件中增加JitPack倉(cāng)庫(kù)依賴。
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
}
Step 2. 在你的model的build.gradle文件中增加TRecyclerView依賴
com.github.SelfZhangTQ:TRecyclerView:2.5.4
Step 3. Item類型配置
DelegateAdapter adapter = new DelegateAdapter.Builder<>()
//設(shè)置刷新頭 如果有刷新需求,此代碼不配置,則不具有刷新功能,ProgressStyle.Pacman配置刷新樣式
.bind(HeaderVo.class, new HeaderViewHolder(this, ProgressStyle.Pacman));
//設(shè)置item1,
.bind(Bean1.class, new ItemView1(this))
//設(shè)置item2,
.bind(Bean2.class, new ItemView2(this))
//加載更多,如果不需要加載更多,此代碼可不配置
.bind(FootVo.class, new FootViewHolder(this, ProgressStyle.Pacman))
//一對(duì)多
.bindArray(ItemData.class, new ItemHolder4(this), new ItemType5(this),new ItemHolder6(this))
.withClass(new OneToMany<ItemData>() {
@Override
public Class<? extends VHolder<ItemData, ?>> onItemView(int position, ItemData itemData) {
if (itemData.type==1) {
return ItemHolder4.class;
}else if (itemData.type==2) {
return ItemHolder5.class;
}else if (itemData.type==3) {
return ItemHolder6.class;
}
return ItemHolder4.class;
}
})
.build();
//數(shù)據(jù)容器
items = new Items();
layoutManager = new LinearLayoutManager(LinearLayoutActivity.this);
mRecyclerView.setAdapter(adapter);
mRecyclerView.setLayoutManager(layoutManager);
Step 4. 自定義刷新動(dòng)畫配置和加載更多描述配置
//自定義刷新頭 需要實(shí)現(xiàn)OnTouchMoveListener接口,
RefreshHeader refreshHeader = new RefreshHeader(this);
.bind(HeaderVo.class,newHeaderViewHolder(LinearLayoutActivity.this,refreshHeader, new refreshHeader.getOnTouchMoveListener()))
//加載更多描述配置,用4個(gè)參數(shù)的構(gòu)造方法即可。
new FootViewHolder(this, ProgressStyle.SysProgress,"努力加載","沒有更多啦。。");
Step 5.下拉刷新,加載更多,滾動(dòng)監(jiān)聽回調(diào)
mRecyclerView.addOnRefreshListener(new OnRefreshListener(){
@Override
public void onRefresh() {
}
@Override
public void onLoadMore() {
}
});
mRecyclerView.addOnTScrollListener(new OnTScrollListener() {
@Override
public void onScrolled(int dx, int dy) {
}
@Override
public void onScrollStateChanged(int state) {
}
});
Step 6.刷新完成或加載更多完成后的操作
//刷新完成,有更多
mRecyclerView.refreshComplete(items,false);
//注:如果默認(rèn)加載不夠一頁數(shù),即沒有更多
mRecyclerView.refreshComplete(items,true);
//加載更多完成,還有分頁數(shù)據(jù),
//此處是服務(wù)器返回的數(shù)據(jù)集合,并非是所有數(shù)據(jù)集合
mRecyclerView.loadMoreComplete(items,false);
// 注:如果默認(rèn)加載不夠一頁數(shù),即沒有更多
mRecyclerView.refreshComplete(items,true);
// 局部刷新
mRecyclerView.notifyItemRangeChanged(position,1);
Step 7. 添加Item點(diǎn)擊事件
adapter.setOnItemClickListener(this);//實(shí)現(xiàn)OnItemClickListener接口
或者通過DelegateAdapter.Builder().setOnItemClickListener(this)配置
項(xiàng)目實(shí)戰(zhàn)使用可參考:<https://github.com/SelfZhangTQ/T-MVVM> <br/>
Step 8.CoordinatorLayout+AppBarLayout+SwipeRecyclerView使用的問題
由于滑動(dòng)沖突,滑動(dòng)到底部加載更多加載時(shí)間長(zhǎng)問題,需要自定義AppBarLayout.Behavior
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
app:elevation="0dp"
app:layout_behavior="com.trecyclerview.util.AppBarBehavior">
TRecyclerView使用步驟介紹完了,對(duì)了adapter好像忘了介紹,NO,NO,NO,你不需要關(guān)心adapter,盡情的編寫ViewHolder吧
項(xiàng)目github地址:https://github.com/SelfZhangTQ/TRecyclerView 歡迎star,感謝支持
Demo簡(jiǎn)單可看實(shí)戰(zhàn)項(xiàng)目
項(xiàng)目實(shí)戰(zhàn)地址github地址:https://github.com/SelfZhangTQ/T-MVVM 歡迎star,感謝支持
效果圖:

Thanks
- multitype
- AVLoadingIndicatorView