一.SwipeRefreshLayout实现下拉刷新

1.方法API:

setOnRefreshListener(OnRefreshListener):添加下拉刷新监听器
setRefreshing(boolean):显示或者隐藏刷新进度条
isRefreshing():检查是否处于刷新状态
setColorSchemeResources():设置进度条的颜色主题,最多设置四种,以前的setColorScheme()方法已经弃用了。

2.简单使用:

<?xmlversionxmlversion="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:androidLinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"android:layout_width="match_parent"
android:layout_height="match_parent">
<includelayoutincludelayout="@layout/common_top_bar_layout"/>
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/demo_swiperefreshlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="vertical"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/demo_recycler"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
></android.support.v7.widget.RecyclerView>
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>

Java:

原理:是一个刷新布局,来自兼容包v4可以运行在低版本,控件如果想要支持下拉刷新,只要使用当前布局包裹 
setColorSchemeColors:修改旋转颜色,可以添加多种颜色 
setRefreshing: 是否显示loading状态 
setOnRefreshListener:下拉刷新监听

 public class MainActivity extends AppCompatActivity {
private SwipeRefreshLayout swipeRefreshLayout;
protected void onCreate(Bundle savedInstanceState) {
·····
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.refresh_layout);
//设置旋转的颜色效果
swipeRefreshLayout.setColorSchemeColors(Color.GREEN, Color.YELLOW, Color.RED);
//设置下拉刷新的监听器
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
public void onRefresh() {
requestData();
}
});
}
private void requestData() {
new Handler().postDelayed(new Runnable() {//延时加载
public void run() {
String json = "{name:小米}";
TextView text = (TextView) findViewById(R.id.text);
text.setText(json);
swipeRefreshLayout.setRefreshing(false);//关闭显示
}
}, );
}

二.加载更多——上滑加载数据 
思路:

1.滚动到底部 getItemCount()-2 ==bottomPosition 
2.不处理滚动中 
OnScrollListener监听滚动加载的监听器 
int dy 滚动距离,向上滚动为正 
layoutManager.findLastVisibleItemPosition获取处于底部数据的下标 
dy>0与isLoading 都是用来控件灵敏度

 public class HomeFragment extends Fragment {
private SwipeRefreshLayout swipeRefreshLayout;
private RecyclerView recyclerView;
private AppAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//有一个显示网络状态
//StateLayout stateLayout = new StateLayout(container.getContext());
swipeRefreshLayout = new SwipeRefreshLayout(container.getContext());
//设置颜色
swipeRefreshLayout.setColorSchemeColors(Color.GREEN);
//设置下拉监听
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
HttpConnect.get(ApiUrls.HOME+"?index=0", callback);
}
});
recyclerView = new RecyclerView(container.getContext());
//设置排列规则
recyclerView.setLayoutManager(new LinearLayoutManager(container.getContext()));
//预先设置了Noemal视图,但是normal视图没有内容 stateLayout.addNormalView(recyclerView);
swipeRefreshLayout.addView(recyclerView);
//发送请求给服务器
HttpConnect.get(ApiUrls.HOME+"?index=0",callback);
return swipeRefreshLayout;
}
DefaultCallBack callback = new DefaultCallBack() {
@Override
public void onStart(int what) {
swipeRefreshLayout.setRefreshing(true);
}
@Override
public void onFinish(int what) {
swipeRefreshLayout.setRefreshing(false);
}
//拿到数据
protected void createView(String json) {
HomeWebInfo info = new Gson().fromJson(json, HomeWebInfo.class);
//创建控件,设置适配器
adapter=new AppAdapter(info.list);
recyclerView.setAdapter(adapter);
//上滑加载数据
addLoadMoreList();
}
};
private void addLoadMoreList(){
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener(){
private boolean isLoading = false;
//int dy 上下滑动的距离 +数代表往上滑动
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
//判断 是否是排列布局
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
//判断是否是线性排列,并且是否滑动距离
if(layoutManager instanceof LinearLayoutManager && dy> ){
//当前是列表
int total = adapter.getItemCount();
int lastPosition = total-;
//获取rv 的bottom条目
int currLastPosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition();
if(currLastPosition==lastPosition&&!isLoading){ }
isLoading=true;
Toast.makeText(MyApp.getContext(),"加载更多...",Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Toast.makeText(MyApp.getContext(), "加载成功", Toast.LENGTH_SHORT).show();
isLoading=false;
}
},);
}
}
});
}
}

RecyclerView 下拉刷新和加载更多的更多相关文章

  1. Android之RecyclerView轻松实现下拉刷新和加载更多

    今天研究了下RecyclerView的滑动事件,特别是下拉刷新和加载更多事件,在现在几乎所有的APP显示数据列表时都用到了.自定义RecyclerView下拉刷新和加载更多听上去很复杂,实际上并不难, ...

  2. RecyclerView的下拉刷新和加载更多 动画

    下拉刷新和加载更多 1.https://github.com/jianghejie/XRecyclerView 2.http://blog.csdn.net/jabony/article/detail ...

  3. 自己封装的工具类,使用原生SwipeRefreshLayout+RecycleView实现下拉刷新和加载更多

    实现SwipeRefreshLayout+RecycleView实现刷新 在你的xml文件里写上如下代码: <android.support.v4.widget.SwipeRefreshLayo ...

  4. iOS 下拉刷新和加载更多 (OC\Swift)

    Swift语言出来之后, 可能还没有第三方的下拉刷新和上提加载, 所以自己用UIRefreshControl控件和UITableView实例的tableFooterView(底部视图)属性结合起来写了 ...

  5. Android UI--自定义ListView(实现下拉刷新+加载更多)

    Android UI--自定义ListView(实现下拉刷新+加载更多) 关于实现ListView下拉刷新和加载更多的实现,我想网上一搜就一堆.不过我就没发现比较实用的,要不就是实现起来太复杂,要不就 ...

  6. Android Demo 下拉刷新+加载更多+滑动删除

    小伙伴们在逛淘宝或者是各种app上,都可以看到这样的功能,下拉刷新和加载更多以及滑动删除,刷新,指刷洗之后使之变新,比喻突破旧的而创造出新的,比如在手机上浏览新闻的时候,使用下拉刷新的功能,我们可以第 ...

  7. PullToRefresh下拉刷新 加载更多 详解 +示例

    常用设置 项目地址:https://github.com/chrisbanes/Android-PullToRefresh a. 设置刷新模式 如果Mode设置成Mode.PULL_FROM_STAR ...

  8. 实现RecyclerView下拉刷新和上拉加载更多以及RecyclerView线性、网格、瀑布流效果演示

    实现RecyclerView下拉刷新和上拉加载更多以及RecyclerView线性.网格.瀑布流效果演示 效果预览 实例APP 小米应用商店 使用方法 build.gradle文件 dependenc ...

  9. RecyclerView下拉刷新上拉加载更多

    现在Android里都建议用RecyclerView代替ListView和GridView,所以下拉刷新和上拉加载更多也需要实现.下拉刷新可以用SwipeRefreshLayout 包裹Recycle ...

随机推荐

  1. C# 多线程六之Task(任务)三之任务工厂

    1.知识回顾,简要概述 前面两篇关于Task的随笔,C# 多线程五之Task(任务)一 和 C# 多线程六之Task(任务)二,介绍了关于Task的一些基本的用法,以及一些使用的要点,如果都看懂了,本 ...

  2. notecase的下载与安装(全网最详细)(图文详解)

    不多说,直接上干货! notecase是什么? 一个按照树状结构来组织文档内容的笔记管理程序 1.双击 2.aceept 3.选择安装所放置的目录路径 4.选择开启目录文件夹 我这里,保持默认 建议默 ...

  3. 垃圾回收(GC)相关算法笔记

    GC需要完成的3件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 引用计数算法 给对象中添维护一个计数器,每当引用这个对象时,计数器加1:当引用失效时,计数器值减1:当计数器值为0时,表示这个 ...

  4. 分享 : 警惕MySQL运维陷阱:基于MyCat的伪分布式架构

    分布式数据库已经进入了全面快速发展阶段.这种发展是与时俱进的,与人的需求分不开,因为现在信息时代的高速发展,导致数据量和交易量越来越大.这种现象首先导致的就是存储瓶颈,因为MySQL数据库实质上还是一 ...

  5. CentOS7 下安装 NFS,Linux/Windows 作为客户端

    目录 一.简介 1. 定义 2. 版本和变化 3. 部署说明 二.服务端 1. 关闭防火墙 2. 安装 nfs 3. 配置说明 4. 配置共享目录 5. 启动服务 6. 确认启动成功 三.Linux ...

  6. (转)Spring常用注解

    使用注解来构造IOC容器 用注解来向Spring容器注册Bean.需要在applicationContext.xml中注册<context:component-scan base-package ...

  7. U3D Invoke系列函数

    public void Invoke(string methodName, float time) 多少秒后执行某个函数 参数说明: methodName:要执行的函数的名称 time:秒数,time ...

  8. UVa 1572 Self-Assembly (拓扑排序)

    题目链接: https://cn.vjudge.net/problem/UVA-1572 Automatic Chemical Manufacturing is experimenting with ...

  9. 从客户端(ASPxFormLayout1$txtRule="<YYYY><MM><DD><XXXX>")中检测到有潜在危险的 Request.Form 值

    在有文本框的值属于这种时<YYYY><MM><DD><XXXX>,会报这个错 在webconfig中加入 <httpRuntime request ...

  10. SQL SERVER TRANSACTION 事物

    1.事务的概念 事物是一种机制,是一种操作序列,它包含了数据库一组操作命令,这组命令要么全部执行,要么都不执行.因此事物是一组不可分割的事物逻辑单元,在数据库进行并发操作时候,事物是作为最小的控制单元 ...