SuperRecyclerView,只为打造出更好用的RecyclerView

来源:互联网 发布:看盘软件排行 编辑:程序博客网 时间:2024/05/21 16:23


正如之前的ListView,现在RecyclerView的衍生版本也层出不穷。今天来自 叶飘舟 的投稿正是RecyclerView的拓展,封装了主流的自定义需求,希望能对大家有所帮助。


一叶飘舟 的博客地址:http://blog.csdn.net/jdsjlzx


简介


SuperRecyclerView 是支持 addHeaderView、 addFooterView、下拉刷新、分页加载数据 的RecyclerView。


它对 RecyclerView 控件进行了拓展,给RecyclerView增加 HeaderView、FooterView,并且不需要对你的Adapter做任何修改。


主要功能


  1. 下拉刷新、滑动到底部自动加载下页数据;

  2. 可以方便添加Header和Footer;

  3. 头部下拉样式可以自定义;

  4. 具备item点击和长按事件。

  5. 网络错误加载失败点击Footer重新请求数据;

  6. 可以动态为FooterView赋予不同状态(加载中、加载失败、滑到最底等)。


感谢


如果我比别人看得远些,那是因为我站在巨人们的肩上。 (牛顿)


本开源控件是基于 HeaderAndFooterRecyclerViewhttps://github.com/cundong/HeaderAndFooterRecyclerView) 开源项目而来,在原基础上进行了扩充。在此感谢cundong作者(github地址:https://github.com/cundong)。


效果图




使用


添加HeaderView、FooterView




添加滚动监听事件




RecyclerOnScrollListener实现了 onScrollUp()、onScrollDown()、onBottom()、onScrolled() 四个事件,如下所示:




  • onScrollUp()——RecyclerView向上滑动的监听事件;

  • onScrollDown()——RecyclerView向下滑动的监听事件;

  • onBottom()——RecyclerView滑动到底部的监听事件;

  • onScrollDown()——RecyclerView正在滚动的监听事件;


加载更多(加载下页数据)


从上面的 RecyclerOnScrollListener的介绍中就可以看出,实现加载更多只要在 onBottom() 接口中处理即可。




下拉刷新


为了达到和 Listview 的下拉刷新效果,本项目 没有借助SwipeRefreshLayout控件,而是在 自定义RecyclerView头部 实现的刷新效果。


这里的下拉刷新效果借鉴了开源库:


AVLoadingIndicatorView

https://github.com/81813780/AVLoadingIndicatorView


设置加载样式:


mRecyclerView.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);mRecyclerView.setArrowImageView(R.drawable.iconfont_downgrey);


AVLoadingIndicatorView 库有多少效果,SuperRecyclerView 就支持多少下拉刷新效果,当然你也可以自定义下拉效果。


效果图:




下拉刷新逻辑处理:


mRecyclerView.setLoadingListener(new CustRecyclerView.LoadingListener() {
   @Override    public void onRefresh() {        requestData();    }});


这里自定义了一个接口 LoadingListener,如下所示:


public interface LoadingListener {
   void onRefresh();}


下拉刷新只要在 onRefresh() 方法中处理即可。


加载网络异常处理


加载数据时如果网络异常或者断网,SuperRecyclerView 为你提供了重新加载的机制。


效果图:




网络异常出错代码处理如下:




上面的 mFooterClick 就是我们点击底部的Footer时的逻辑处理事件,很显然我们还是在这里做重新请求数据操作。


点击事件和长按事件处理


Hongyang前辈的博客中有下描述:


Click and LongClick


不过一个挺郁闷的地方就是,系统没有提供ClickListenerLongClickListener。 


不过我们也可以自己去添加,只是会多了些代码而已。 


实现的方式比较多,你可以通过mRecyclerView.addOnItemTouchListener去监听然后去判断手势, 当然你也可以通过adapter中自己去提供回调,这里我们选择后者,前者的方式,大家有兴趣自己去实现。


Hongyang大神选择了后者,SuperRecyclerView 选择了前者。


先看下怎么使用:




原理就是监听 RecyclerView.OnItemTouchListener 事件,判断手势区别是点击还是长按。由于代码过多就不贴出来了。


冲突解决


如果item里面有按钮也有单独的点击事件,利用上面的方式就好出现冲突,此时不要再使用 mRecyclerView.addOnItemTouchListener 接口,这里给出另一种实现方法。


代码如下:




viewHolder.itemView是RecyclerView.Adapter中本身就具有的,不用额外定义。


源码如下:


public static abstract class ViewHolder {
   public final View itemView;
   int mPosition = NO_POSITION;
   int mOldPosition = NO_POSITION;
   long mItemId = NO_ID;
   int mItemViewType = INVALID_TYPE;
   int mPreLayoutPosition = NO_POSITION;


分享


介绍完了SuperRecyclerView,似乎还少些什么,对了,那就是adapter了。


为了方便大家使用,分享个封装过的adapter。




ListBaseAdapter 使用了泛型,简单方便,消除了强制类型转换。


使用如下:




ListBaseAdapter虽然功能不强大,但是使用很方便。


结语


SuperRecyclerView使用方便简单,无论你添加多少Header和Footer,你都不用担心position的问题,除了方便还是方便。


点击最后 阅读原文 查看源码。




如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。


欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号:



阅读全文
0 0
原创粉丝点击