舞动着键盘和鼠标,我誓言要把这个世界写的明明白白

本文出自门心叼龙的博客,属于原创类容,转载请注明出处。https://blog.csdn.net/geduo_83/article/details/87986968

框架github下载地址:https://github.com/geduo83/FlyRefreshLayout 欢迎star,加群:810970432交流

无论是Android应用,还是IOS应用,我们每个app几乎都离不开下拉刷新和上拉加载更多的功能,这已经作为一个app的最基本的功能, Android5.1之前并没有提供系统原生的下拉刷新控件,直到android5.1开始,谷歌的Android团队推出了一款下拉刷新控件SwipeRefeshLayout,但是只提供了下拉刷新的功能,并没有提供上拉加载更多,想要了解更多,请移步官网:https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html。

其实在谷歌官网推出之前,在github已经开源了很多Andriod下拉上拉的控件,比如人气比较高的SuperSwipeRefreshLayout,FlyRefreshLayout刷新组件是基于SuperSwipeRefreshLayout进行二次开发,有人可能会问你为什么不自己写这样一个控件而要在别人的基础上进行二次开发,要知道在软件开发行业有一句很著名的话:“ 不要重复造轮子 ”,在日常的实战开发中,要求讲究的是效率,领导要看的是结果,没有必要做一些重复的工作,除非确实自己想研究一下,有充裕的闲暇时间也是未尝不可。

FlyRefreshLayout刷新组件在原功能的基础上增加了通用小菊花样式DaisyRefreshLayout刷新控件和通用小箭头样式ArrowRefreshLayout刷新控件,支持RecyclerView,NestedScrollView,ScrollView 、ListView,GridView,能自定义HeadView和FooterView,不但支持最基本的下拉刷新、上拉加载更多,还在其基础上扩展了是否启用下拉刷新、是否启用上拉加载更多、增加了自动刷新功能,优化了下拉刷新监听器、上拉加载更多监听器,增加了自动刷新监听器,使其调用更加的方便。

二次开发无外乎就这么几个目的,要么增加了一些功能,要么是调用更加方便,要么就是增强了原代码的安全性。在二次开发的时候尽量不要在原类上的直接修改, 而在日常开发过程中很多人都是采用简单粗暴的方式,直接在原类上改,随着功能的增多,导致这个类的代码及其臃肿,这样一旦出现Bug排查起来也是非常痛苦的,因为你不知道到底是自己修改就导致的问题,还是原来就存在这样的Bug,再之也是对原作者的不尊重,因为谁都不愿意看到自己的代码被被人改的烂七八糟。

BaseRefreshLayout 作为扩展的核心功能类,直接继承了原类SuperSwipeRefreshLayout,增加了三个监听器,一个自动刷新的监听器OnAutoLoadListener ,另外两个是代理监听器,OnRefreshListener、OnLoadMoreListener 来代理原类的自动刷新监听器和下拉刷新监听器。另外扩展了两个非常重要的功能,禁用下拉刷新、禁用上拉加载更多的功能,这在原控件是不支持的,更多多细节我们就直接看源码吧。

BaseRefreshLayout

package com.fly.refresh;import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;/*** Description: <BaseRefreshLayout><br>* Author:      gxl<br>* Date:        2019/2/25<br>* Version:     V1.0.0<br>* Update:     <br>*/
public abstract class BaseRefreshLayout extends SuperSwipeRefreshLayout {private boolean isEnableRefresh = true;//是否启用下拉刷新private boolean isEnableLoadMore = true;//是否启用上拉加载更多protected OnRefreshListener mOnRefreshListener;//下拉刷新监听器protected OnLoadMoreListener mOnLoadMoreListener;//上拉加载更多监听器protected OnAutoLoadListener mOnAutoLoadListener;//自动加载的回调public interface OnRefreshListener{void onRefresh();}public interface OnLoadMoreListener{void onLoadMore();}//调用autoLoad的回调public interface OnAutoLoadListener{void onAutoLoad();}public void setOnRefreshListener(OnRefreshListener onRefreshListener) {mOnRefreshListener = onRefreshListener;}public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {mOnLoadMoreListener = onLoadMoreListener;}public void setOnAutoLoadListener(OnAutoLoadListener onAutoLoadListener) {mOnAutoLoadListener = onAutoLoadListener;}public BaseRefreshLayout(Context context, AttributeSet attrs) {super(context, attrs);}/*** 是否启用下拉刷新* @param enableRefresh*/public void setEnableRefresh(boolean enableRefresh) {isEnableRefresh = enableRefresh;}/*** 是否启用加载更多* @param enableLoadMore*/public void setEnableLoadMore(boolean enableLoadMore) {isEnableLoadMore = enableLoadMore;}/*** 自动刷新*/public void autoRefresh(){postDelayed(new Runnable() {@Overridepublic void run() {showRefresh();setRefreshing(true);if(mOnAutoLoadListener != null){mOnAutoLoadListener.onAutoLoad();}}},1000 * 1);}/*** 如果禁用了加载更多则就直接返回了* @param ev* @param action* @return*/@Overrideprotected boolean handlerPushTouchEvent(MotionEvent ev, int action) {if (!isEnableLoadMore) {return false;}return super.handlerPushTouchEvent(ev,action);}/*** 如果禁用了就直接返回了* @param ev* @param action* @return*/@Overrideprotected boolean handlerPullTouchEvent(MotionEvent ev, int action) {if (!isEnableRefresh) {return false;}return super.handlerPullTouchEvent(ev,action);}public abstract void showRefresh();
}

小菊花刷新样式DaisyRefreshLayout 和小箭头刷新样式ArrowRefreshLayout的源码我就不分析了,大家就直接下载源码看吧。

主要功能

  • 支持最基本的下拉刷新、上拉加载更多
  • 支持自定义HeadView和FootView
  • 支持自动刷新
  • 支持启用、禁用下拉刷新
  • 支持启用、进攻上拉加载更多
  • 通用小菊花样式DaisyRefreshLayout
  • 通用小箭头样式ArrowRefreshLayout

类关系图 :

  • 基本类图

  • HeadView关系图:

  • FootView关系图:

小菊花样式DaisyRefreshLayout使用步骤:

1.创建布局文件

<?xml version="1.0" encoding="utf-8"?>
<com.fly.refresh.DaisyRefreshLayoutandroid:id="@+id/refresh_layout"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:android="http://schemas.android.com/apk/res/android"><android.support.v4.widget.NestedScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent"/>
</com.fly.refresh.DaisyRefreshLayout>

2.添加下拉刷新监听器

 DaisyRefreshLayout mRefreshLayout = findViewById(R.id.refresh_layout);mRefreshLayout.setOnRefreshListener(new DaisyRefreshLayout.OnRefreshListener() {@Overridepublic void onRefresh() {Log.v(TAG,"refresh start");new Handler().postDelayed(new Runnable() {@Overridepublic void run() {Log.v(TAG,"response ok");mRefreshLayout.setRefreshing(false);}},1000 * 3);}});

3.添加上拉加载更多的监听器

 mRefreshLayout.setOnLoadMoreListener(new DaisyRefreshLayout.OnLoadMoreListener() {@Overridepublic void onLoadMore() {Log.v(TAG,"loadMore start");new Handler().postDelayed(new Runnable() {@Overridepublic void run() {Log.v(TAG,"response ok");mRefreshLayout.setLoadMore(false);}},1000 * 3);}});

4.添加自动刷新监听器

 //自动刷新回调监听器mRefreshLayout.setOnAutoLoadListener(new DaisyRefreshLayout.OnAutoLoadListener() {@Overridepublic void onAutoLoad() {Toast.makeText(getBaseContext(),"开始加载数据了",Toast.LENGTH_SHORT).show();}});
//自动刷新调用   mRefreshLayout.autoRefresh();

4.停止刷新

mRefreshLayout.setRefreshing(false);

5.停止加载更多

mRefreshLayout.setLoadMore(false);

6.启用、禁用下拉刷新

mRefreshLayout.setEnableRefresh(b);

7.启用、禁用上拉加载更多

mRefreshLayout.setEnableLoadMore(b)

小箭头样式ArrowRefreshLayout的使用

小箭头样式ArrowRefreshLayout的使用方法和DaisyRefreshLayout的使用类似我就不演示了

功能演示:

小菊花样式DaisyRefreshLayout;小箭头样式DaisyRefreshLayout

 

问题反馈

在使用中有任何问题,请在下方留言,或加入Android、Java开发技术交流群
QQ群:810970432
email:geduo_83@163.com

关于作者

var geduo_83 = {nickName  : "门心叼龙",site : "http://www.weibo.com/geduo83"
}

Android下拉刷新、上拉加载更多组件FlyRefreshLayout详解相关推荐

  1. uni-app下拉刷新触底加载更多

    首先在pages.json 配置文件中配置    "enablePullDownRefresh": true  需要在哪用加载就配置在路由的style里 两个事件 //下拉刷新 o ...

  2. recyclerview的数据刷新(下拉刷新和自动加载更多)以及添加提示语(例如:“数据已加载完毕”)

    下拉加载更多的核心是SwipeRefreshLayout搭配Recyclerview进行使用.布局为 <android.support.v4.widget.SwipeRefreshLayout ...

  3. Android 自定义 ListView 上下拉动“刷新最新”和“加载更多”歌曲列表

    本文内容 环境 测试数据 项目结构 演示 参考资料 本文演示,上拉刷新最新的歌曲列表,和下拉加载更多的歌曲列表.所谓"刷新最新"和"加载更多"是指日期.演示代码 ...

  4. android listview下拉刷新动画,android 安卓 listview 支持下拉刷新 上拉加载更多

    [1]重写listViewimport java.text.SimpleDateFormat; import java.util.Date; import com.example.testdddlea ...

  5. Android ListView 实现下拉刷新上拉加载

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/39965327 1.简介 无疑,在Android开发中,ListView是使用非常频 ...

  6. android 列表上拉加载更多,Android 下拉刷新,上拉加载更多控件–支持ListView,GridView和ScrollView...

    麦洛遇到这样一个需求,实现类似于IOS下拉刷新,上拉加载更多的控件.麦洛google,baidu了一番,网上有不少实现,比较常见的是国外牛人的实现,不过国外的实现基本上都是扩展于ListView,所以 ...

  7. Android 下拉刷新上拉加载可以左右滑动

    下面是下拉刷新上拉加载可以左右滑动的实例,下面是效果图: GitHub 下载地址:https://github.com/wuqingsen/MySlidingNested CSDN 下载地址:http ...

  8. Android自定义控件实战——实现仿IOS下拉刷新上拉加载 PullToRefreshLayout

    下拉刷新控件,网上有很多版本,有自定义Layout布局的,也有封装控件的,各种实现方式的都有.但是很少有人告诉你具体如何实现的,今天我们就来一步步实现自己封装的 PullToRefreshLayout ...

  9. Android 下拉刷新上拉加载 多种应用场景 超级大放送(上)

    转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉加载,网上的Demo太多太多了,这 ...

最新文章

  1. 安装配置postgreSQL+pgcli+pgadmin3
  2. Error: libcrypto required
  3. python 删除字符串中的所有相邻的重复项
  4. 神经网络 | 受限波尔兹曼机(附源代码)
  5. 50题真 • 一文入门TensorFlow2.x
  6. 阻塞、非阻塞与同步、异步的区别
  7. jzoj4223-旅游【并查集】
  8. CV与物理模型的结合,正在改变传统天气预报
  9. 平常代码练习报错问题解决
  10. XML数据读取方式性能比较(一) (转)
  11. oracle last_day比较,Oracle的LAST_DAY函数
  12. Android 仿美团网,大众点评购买框悬浮效果之修改版
  13. 为什么t6显示登录不到服务器,t6客户端登录不到服务器
  14. 小程序读取云服务器,小程序读取云服务器
  15. Microsoft Office Word一打开文档就弹出样式小窗口
  16. Voltage Trackers for Sensors power supply
  17. 简单推箱子java_Java实现简单推箱子游戏
  18. 调用新浪接口查询IP地址
  19. freeswitch通过limit限制cps
  20. 【解题报告】2014ACM/ICPC亚洲区广州站

热门文章

  1. 诛仙游戏SQL充值语句(mysql不存在则插入,存在则更新)
  2. Jquery-validate无法验证,出现相应表单has no name assigned
  3. python处理滑块验证码(企查查)实例
  4. 关于91yun锐速,报错“Invalid module format ..........Loading ServerSpeeder failed: failed to load engine 0”
  5. 管易云与金蝶云星空对接集成订单查询连通销售出库新增(GK管易云订单-销售出库)
  6. SpringCloud10 - 分布式配置中心--config
  7. 【python读取小觅智能双目相机视频流】
  8. 运筹学动态规划matlab代码,运筹学胡运权清华版-7-04动态规划应用举例
  9. ASC4056 1A线性锂离子电池充电器的详细数据手册
  10. 会议如何进行网络直播