https://github.com/xfhy/complexgrouplistlayout
一个万能的RecyclerView的分组adapter,简单易用
https://github.com/xfhy/complexgrouplistlayout
recyclerview recyclerview-adapter
Last synced: 3 months ago
JSON representation
一个万能的RecyclerView的分组adapter,简单易用
- Host: GitHub
- URL: https://github.com/xfhy/complexgrouplistlayout
- Owner: xfhy
- License: apache-2.0
- Created: 2017-08-10T13:48:34.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-08-10T13:58:24.000Z (almost 8 years ago)
- Last Synced: 2025-01-16T01:17:12.854Z (5 months ago)
- Topics: recyclerview, recyclerview-adapter
- Language: Java
- Homepage:
- Size: 111 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 使用万能分组adapter
# 1,复制SectionedRecyclerViewAdapter.java到自己的工程中
# 2,首先需要自己写一个adapter继承SectionedRecyclerViewAdapter这个抽象类
比如:
public class TestAdapter extends SectionedRecyclerViewAdapter
其中涉及到几个泛型有几个泛型
- 第一个泛型(HeaderHolder)是RecyclerView的整个列表的Header的ViewHolder,一般是广告,轮播图等等
- 第二个(TestSectionHeaderHolder)是分组的每个组的header的ViewHolder
- 第三个(TestSectionBodyHolder)是分组的每个组内的item的ViewHolder
- 第四个(TestSectionFooterHolder)是分组的每个组内的footer的ViewHolder
- 第五个(FooterHolder)是RecyclerView的整个列表的footer的ViewHolder# 3,自己的adapter需要实现下面这些父类的抽象方法
/**
* 整个列表是否有Header
*/
protected abstract boolean hasHeader();/**
* 返回分组的数量
*/
protected abstract int getSectionCount();/**
* 返回当前分组的item数量
*
* @param section 组头的位置
*/
protected abstract int getItemCountForSection(int section);/**
* 当前分组是否有footer
*
* @param section 组头的位置
*/
protected abstract boolean hasFooterInSection(int section);/**
* 为分组header创建一个类型为H的ViewHolder
*/
protected abstract H onCreateSectionHeaderViewHolder(ViewGroup parent, int viewType);/**
* 为分组footer创建一个类型为F的ViewHolder
*
*/
protected abstract F onCreateSectionFooterViewHolder(ViewGroup parent, int viewType);/**
* 为分组内容创建一个类型为VH的ViewHolder
*
*/
protected abstract VH onCreateItemViewHolder(ViewGroup parent, int viewType);/**
* 为整个列表创建一个类型为RH的ViewHolder
*
*/
protected abstract RH onCreateHeaderViewHolder(ViewGroup parent, int viewType);/**
* 为整个列表创建一个类型为FO的ViewHolder
*
*/
protected abstract FO onCreateFooterViewHolder(ViewGroup parent, int viewType);/**
* 绑定分组的Header数据
*/
protected abstract void onBindSectionHeaderViewHolder(H holder, int section);/**
* 绑定分组数据
*
*/
protected abstract void onBindItemViewHolder(VH holder, int section, int position);/**
* 绑定整个列表的Header数据
*
*/
protected abstract void onBindHeaderViewHolder(RH holder);/**
* 绑定分组的footer数据
*
*/
protected abstract void onBindSectionFooterViewHolder(F holder, int section);
/**
* 当footer不是上拉刷新时,复写此方法,如:点击查看更多或者更复杂的布局等
*
*/
protected abstract void onBindFooterOtherViewHolder(FO holder);然后自己去实现里面的方法就行了,简单方便.还可以通过setEmptyView(emptyView)设置没有数据时显示的空布局.
# 4,如果需要实现上拉加载
## 简单的使用 ,则可以用LoadMoreListener.java
添加上拉刷新监听
loadMoreListener = new LoadMoreListener(mGridLayoutManager) {
@Override
public void onLoadMore() {
isPull = false;
isLoading = true;
mAdapter.changeMoreStatus(SectionedRecyclerViewAdapter.LOADING_MORE);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//mPresenter.loadData(1);
List datas = DatasUtil.createDatas();
mAdapter.addMoreData(datas);mAdapter.changeMoreStatus(SectionedRecyclerViewAdapter.PULLUP_LOAD_MORE);
isLoading = false;
}
}, 1000);
}
};
rv.addOnScrollListener(loadMoreListener);## 稍微高级点的控制,则用RecycleViewScrollHelper.java
# 5,添加分割线,则需要用到SectionedGridDivider.java
使用方式:
mDivider = new SectionedGridDivider(this, 50, Color.parseColor("#F5F5F5"));
rv.addItemDecoration(mDivider);# 总结
今天早上看到的郭霖大神的微信公众号上推送的文章,然后我将它理解了一下,然后写下来,谢谢原创.微信公众号分享的文章地址为:http://mp.weixin.qq.com/s/XbR9M2oeYcvrhG6GgjIgGA