很想给大家分享这个开源项目,但是由于工作的关系,没有抽出空,但还是趁着工作间隙写下了这篇博客。
简介
LRecyclerView是支持addHeaderView、 addFooterView、下拉刷新、分页加载数据的RecyclerView。
它对 RecyclerView 控件进行了拓展,给RecyclerView增加HeaderView、FooterView,并且不需要对你的Adapter做任何修改。
主要功能
- 下拉刷新、滑动到底部自动加载下页数据;
- 可以方便添加Header和Footer;
- 头部下拉样式可以自定义;
- 具备item点击和长按事件。
- 网络错误加载失败点击Footer重新请求数据;
- 可以动态为FooterView赋予不同状态(加载中、加载失败、滑到最底等)。
项目地址:https://github.com/jdsjlzx/LRecyclerView
感谢
如果我比别人看得远些,那是因为我站在巨人们的肩上。 (牛顿)
本开源控件是基于 HeaderAndFooterRecyclerView 开源项目而来,在原基础上进行了扩充。在此感谢cundong作者(github地址:https://github.com/cundong)。
效果图
Gradle
Step 1. 在你的根build.gradle文件中增加JitPack仓库依赖。
1 2 3 4 5 6 |
allprojects { repositories { jcenter() maven { url "https://jitpack.io" } } } |
Step 2. 在你的model的build.gradle文件中增加LRecyclerView依赖。
1 |
compile 'com.github.jdsjlzx:LRecyclerView:1.0.0' |
使用
添加HeaderView、FooterView
1 2 3 4 5 6 7 8 9 10 11 12 13 |
mDataAdapter = new DataAdapter(this); mDataAdapter.setData(dataList); mHeaderAndFooterRecyclerViewAdapter = new HeaderAndFooterRecyclerViewAdapter(this, mDataAdapter); mRecyclerView.setAdapter(mHeaderAndFooterRecyclerViewAdapter); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); //add a HeaderView RecyclerViewUtils.setHeaderView(mRecyclerView, new SampleHeader(this)); //add a FooterView RecyclerViewUtils.setFooterView(mRecyclerView, new SampleFooter(this)); |
注意:
mHeaderAndFooterRecyclerViewAdapter = new HeaderAndFooterRecyclerViewAdapter(this, mDataAdapter);
HeaderAndFooterRecyclerViewAdapter提供了一些实用的功能,使用者不用关心它的实现,只需构造的时候把自己的mDataAdapter以参数形式传进去即可。
下拉刷新和加载更多
为了大家使用方便,将需要用的方法统一封装到接口LScrollListener中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
mRecyclerView.setLScrollListener(new LRecyclerView.LScrollListener() { @Override public void onRefresh() { } @Override public void onScrollUp() { } @Override public void onScrollDown() { } @Override public void onBottom() { } @Override public void onScrolled(int distanceX, int distanceY) { } }); |
LScrollListener实现了nRefresh()、onScrollUp()、onScrollDown()、onBottom()、onScrolled五个事件,如下所示:
1 2 3 4 5 6 7 8 9 |
void onRefresh();//pull down to refresh void onScrollUp();//scroll down to up void onScrollDown();//scroll from up to down void onBottom();//load next page void onScrolled(int distanceX, int distanceY);// moving state,you can get the move distance |
- onRefresh()——RecyclerView下拉刷新事件;int distanceY);// moving state,you can get the move distance