pulltorefreshRecylerView下拉刷新上拉加载,支持自能预加载,可定制的底部

下拉刷新上拉加载控件+Material Design使用

人所缺乏的不是才干而是志向,不是成功的能力而是勤劳的意志。 —— 部尔卫

Material Design控件使用

前几天分享了两篇Material Design控件使用的文章,这里就不多做叙述,下面是传送门,想要学习的小伙伴可以去看下:

juejin.im/entry/58d8d…
juejin.im/entry/58d9c…

时间:2017年4月10日15:34:44

更新:依赖库已更新,如果想使用最新版的小伙伴做下修改

1.解决当列表数据不够一屏的时候,底部的 footer 加载中无法隐藏;

2.添加隐藏/显示底部footer方法(具体在下文)

3.感谢 @姓名 提出的问题!!

《pulltorefreshRecylerView下拉刷新上拉加载,支持自能预加载,可定制的底部》

时间:2017年4月11日15:23:12

更新:添加头部header隐藏/显示方法(具体在下文)

pulltorefreshRecylerView

下拉刷新上拉加载控件

描述

这是一个下拉刷新上拉加载更多框架,头部用的秋哥的android-Ultra-Pull-To-Refresh,底部和没有数据的状态自己实现的。

特点

  • 可定制的头部 (可以查看android-Ultra-Pull-To-Refresh文档)
  • 可定制的底部 (加载中/没有数据/加载失败 三种状态的定制)
  • 可定制的没有数据状态显示 (目前只有一个状态)
  • 可定制列表智能预加载
  • 目前提供一个实现好的ItemDecoration(头部吸附效果)

效果预览

下拉刷新上拉加载

《pulltorefreshRecylerView下拉刷新上拉加载,支持自能预加载,可定制的底部》

头部吸附效果

《pulltorefreshRecylerView下拉刷新上拉加载,支持自能预加载,可定制的底部》

列表智能预加载

《pulltorefreshRecylerView下拉刷新上拉加载,支持自能预加载,可定制的底部》

使用方式

依赖

Step 1. 在project的build的repositories{}中添加maven { url ‘jitpack.io‘ }

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}复制代码

Step 2. 在module中添加compile ‘com.github.tengyukun:pulltorefreshRecylerView:v1.2’

dependencies {
        //compile 'com.github.tengyukun:pulltorefreshRecylerView:v1.0'
        //更新解决当列表只有一页数据的时候,底部的 footer 加载中无法隐藏
        //compile 'com.github.tengyukun:pulltorefreshRecylerView:v1.1'
        //添加header隐藏/显示方法
        compile 'com.github.tengyukun:pulltorefreshRecylerView:v1.2'
}复制代码

配置

目前有两个参数可以配置

  • app:emply_layout
    没有数据时候布局

  • app:number_load_more
    最后可见条目 + number_load_more > total 触发加载更多;默认值为4

xml中配置示例

<com.pulltorefresh.tyk.library.PtrDefRecyclerView
        android:id="@+id/prv_fragmentthree_content"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        app:emply_layout="@layout/erv_default_empty"
        app:number_load_more="5"/>复制代码

activity代码配置

  • 基本设置

      prv_fragmentthree_content.setAdapter(rvAdapter = new RvAdapter());//设置adapter
      prv_fragmentthree_content.setLastUpdateTimeRelateObject(this);//传入参数类名作为记录刷新时间key
      prv_fragmentthree_content.setOnRefreshListener(this);//设置刷新监听
      prv_fragmentthree_content.setOnLoadListener(this);//设置加载更多监听复制代码
  • 隐藏/显示空状态界面

      prv_fragmentthree_content.hideEmptyView();
      prv_fragmentthree_content.showEmptyView();复制代码
  • (v1.1更新)隐藏/显示底部footer

      prv_fragmentthree_content.hideFooterView();
      prv_fragmentthree_content.showFooterView();复制代码
  • (v1.2更新)隐藏/显示底部header

     prv_fragmentthree_content.hideHeaderView();
     prv_fragmentthree_content.showHeaderView();复制代码
  • 刷新设置

      prv_fragmentthree_content.refreshComplete();//下拉刷新结束 
      prv_fragmentthree_content.loadComplete();//上拉加载结束
      prv_fragmentthree_content.loading();//上拉加载显示"加载中" 
      prv_fragmentthree_content.loadFail();//上拉加载显示"加载失败,点击重试"
      prv_fragmentthree_content.noMore();//上拉加载显示"暂无更多数据"复制代码

由于这里使用的PtrDefRecyclerView,头部就是默认经典样式所以需要调用,使用其他头部时不需要调用

prv_fragmentthree_content.setLastUpdateTimeRelateObject(this);//传入参数类名作为记录刷新时间key复制代码

使用MaterialHeader

MaterialHeader materialHeader = new MaterialHeader(activity);
    materialHeader.setPadding(0, 40,0,40);
    prv_fragmentthree_content.setHeaderView(materialHeader);
    prv_fragmentthree_content.setPinContent(true);复制代码

adapter代码配置

adapter需要实现CommonAdapter或者MultipleAdapter抽象方法

//创建ViewHolder
public abstract VH createCustomViewHolder(ViewGroup parent, int viewType);
//ViewHolder设置数据
public abstract void bindCustomViewHolder(VH holder, T t, int position);复制代码

目前提供了下面这些方法操作adapter数据,具体实现可以在CommonAdapter中查看

  • 新增数据

      public void add(@NonNull T object)
      public void addAll(@NonNull Collection collection)
      public void addAll(@NonNull T… items)
      public void insert(@NonNull T object, int index)
      public void insertAll(@NonNull Collection collection, int index)复制代码
  • 删除数据

      public void remove(int index)
      public boolean remove(@NonNull T object)
      public void clear()复制代码
  • 修改数据

      public void update(@NonNull List mDatas)复制代码
  • 查看数据

      public T getItem(int position)
      public int getPosition(T item)
      public List getData()复制代码
  • 排序

      public void sort(Comparator comparator)复制代码
  • 加载布局

      public View inflateView(@LayoutRes int resId, ViewGroup parent)复制代码

adapter中ViewHolder需要继承BaseViewHolder

其他配置

头部吸附效果

《pulltorefreshRecylerView下拉刷新上拉加载,支持自能预加载,可定制的底部》

  mItemDecoration = new StickItemDecoration(context,dataList) {
          @Override
          public String getTag(int position) {
          return "吸附头部显示的文字";
          }
    }
  prv_fragmentthree_content.addItemDecoration(mItemDecoration);复制代码

这里StickItemDecoration提供了如下方法来定制吸附效果

//设置吸附条目高度
public void setStickHeight(int mStickHeight)
//设置吸附条目背景
public void setStickBackgroundColor(int mStickBackgroundColor)
//设置吸附文字颜色
public void setStickTextColor(int mStickTextColor)
//设置吸附文字大小
public void setStickTextSize(int mStickTextSize)
//设置吸附文字leftmargin
public void setStickTextoffset(int mStickTextoffset)复制代码

自定义

头部使用秋哥的android-Ultra-Pull-To-Refresh
秋哥默认已经实现了3个头部

  • MaterialHeader
  • PtrClassicDefaultHeader
  • StoreHouseHeader
    一般情况下这些样式应该够了,如果有特殊需求可以自定义头部.然后prv.setHeaderView(view);

底部的话目前我只实现了一个PtrDefaultFooter,自定义的话需要实现PtrLoadUIHandle接口.写法可以参考PtrDefaultFooter

 public interface PtrLoadUIHandle {

    /** * 允许加载更多 */
    int LOAD = 1;

    /** * 暂无更多数据 */
    int NOMORE = 2;

    /** * 加载失败 */
    int LOADFAIL = 3;

    /** * @return 获取底部当前状态 */
    int getState();

    void onLoading();//loading状态实现

    void onNoMore();//没有数据状态实现

    void onLoadFail(OnLoadListener listener);//加载失败实现


}复制代码

实现后调用setFooterView()方法设置

其他

FlexboxLayout使用

前几天在掘金上看到依然饭特稀西大神写的Android可伸缩布局-FlexboxLayout(支持RecyclerView集成),试了一下,很是好用啊,这里也不做叙述,下面是效果图和传送门,样式有很多想学习的小伙伴可以去看一下。

《pulltorefreshRecylerView下拉刷新上拉加载,支持自能预加载,可定制的底部》

Android可伸缩布局-FlexboxLayout(支持RecyclerView集成)

结尾

Github地址:github.com/tengyukun/p…
请大家多多关注,更多更新会首先在GitHub上体现,也会在第一时间在本平台发布

    原文作者:Android
    原文地址: https://juejin.im/post/58db3c1744d904006951478c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞