RecyclerView下拉刷新上拉加载(一)
listview下拉刷新上拉加载扩展(一) http://blog.csdn.net/baiyuliang2013/article/details/50252561
listview下拉刷新上拉加载扩展(二)-仿美团外卖 http://blog.csdn.net/baiyuliang2013/article/details/50253135
listview下拉刷新上拉加载扩展(三)-仿最新版美团外卖 http://blog.csdn.net/baiyuliang2013/article/details/50854592
前几篇文章讲过listview的自定义下拉刷新上拉加载,最近一直考虑再来个RecyclerView的下拉刷新和上拉加载,毕竟RecyclerView使用的越来越多了,扒了扒网上有关RecyclerView下拉刷新上拉加载的也有很多,不过大多数都满足不了像listview上的那种刷新效果!为此,博主也是煞费苦心地思考了两天,到底该怎样做,才能让RecyclerView的下拉刷新上拉加载像listview一样666呢?
我们知道,listview自带有addHeaderView和addFooterView,很随意的添加头尾布局,而且在重写listview时监听本身即可,但遗憾的是,RecyclerView并不像listview那样方便的添加头尾布局,所以问题就来了,想实现RecyclerView的下拉刷新和上拉加载必然要解决的一件事就是,如何随意的给RecyclerView添加头尾布局?
有的同学可能会说,RecyclerView通过适配器中的viewType添加header和footer不是很好办的事情吗?是的,抛开刷新不说,RecyclerView添加头尾布局确实方便,但这个违背了自定义View的初衷,我们要的是像listview一样重写RecyclerView,而不需要任何其它条件,拿来即用,所以这个方法不可行!那还有什么方法呢,博主思来想去,也就通过重写线性布局LinearLayout,来顺序添加headerview,RecyclerView,footerview最适合不过了,然后监听LinearLayout的触摸事件可达到效果!
好了,思路确定后,开始实现吧!
*重写LinearLayout,并在构造方法中,inflate出headerview,RecyclerView,footerview,并依次添加!(步骤跟前几篇的listview刷新相似);
*监听触摸事件,结合上几篇listview的处理方法,监听OnTouch,不过悲催的是,博主忘记了一点,现在重写的是LinearLayout即一个ViewGroup,RecyclerView只是LinearLayout的一个子View,下拉时的效果还凑合,但是不松手再上滑时就悲催了,因为RecyclerView跟headerview和footerview并不像listview那样是一体的,所以效果可想而知了,因此只监听onTouch当然是不行的!
好吧,那现在我们还得把一把事件分发机制了。。。(事件分发机制,博主也不会细讲,因为博主在迷迷糊糊的呢。万一讲错了,你们削我咋弄?),上一张触摸事件传递图吧:
对事件分发机制有点经验的应该很容易看懂了,结合我们的项目,那么在触摸RecyclerView的事件传递就是:
触摸RecyclerView:
->LinearLayout的dispatchTouchEvent
->LinearLayout的onInterceptTouchEvent
->RecyclerView的dispatchTouchEvent
->RecyclerView的onTouchEvent
->LinearLayout的onTouchEvent
关于事件分发机制不懂得同学可以自行百度了,注意一点,最小View是没有onInterceptTouchEvent拦截事件的!
好了,事件分发弄通了,往下进行呗!但俗话说的好,不要重复发明轮子,呵呵,所以博主也参考了开源的pulltorefresh中的部分代码(当然,大家在使用轮子的时候一定要搞懂原理,达到举一反三地效果,切不可奉行糊里糊涂的拿来主义),结合本项目中的RecyclerView完成了像listview那般的下拉刷新和上拉加载!
看下实现效果吧:
布局代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.byl.recyclerview.view.PullRecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"/>
</RelativeLayout>
实现代码:
recyclerView = (PullRecyclerView) findViewById(R.id.recyclerView);
recyclerView.setOnHeaderRefreshListener(this);
recyclerView.setOnFooterRefreshListener(this);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
myAdapter = new MyAdapter();
recyclerView.setAdapter(myAdapter);
本例中没有设置禁止下拉上拉的方法,大家可根据需要自行设置一个方法,在触摸事件中判断即可!当item数量不满一屏时可以禁止上拉加载!
ASdemo下载地址:http://download.csdn.net/detail/baiyuliang2013/9531776
RecyclerView下拉刷新上拉加载(一)的更多相关文章
- Android 下拉刷新上啦加载SmartRefreshLayout + RecyclerView
在弄android刷新的时候,可算是耗费了一番功夫,最后发觉有现成的控件,并且非常好用,这里记录一下. 原文是 https://blog.csdn.net/huangxin112/article/de ...
- SwipeRefreshLayout实现下拉刷新上滑加载
1. 效果图 2.RefreshLayout.java package myapplication.com.myapplication; import android.content.Context; ...
- 移动端下拉刷新上拉加载-mescroll.js插件
最近无意间看到有这么一个上拉刷新下拉加载的插件 -- mescroll.js,个人感觉挺好用的,官网地址是:http://www.mescroll.com 然后我就看了一下文档,简单的写了一个小dem ...
- 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载
title: 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载 tags: -RecyclerView,下拉刷新,上拉加载更多 grammar_cjkRuby: true - ...
- RecyclerView下拉刷新上拉加载(三)—对Adapter的封装
RecyclerView下拉刷新上拉加载(一) http://blog.csdn.net/baiyuliang2013/article/details/51506036 RecyclerView下拉刷 ...
- RecyclerView下拉刷新上拉加载(二)
listview下拉刷新上拉加载扩展(一) http://blog.csdn.net/baiyuliang2013/article/details/50252561 listview下拉刷新上拉加载扩 ...
- MaterialRefreshLayout+ListView 下拉刷新 上拉加载
效果图是这样的,有入侵式的,非入侵式的,带波浪效果的......就那几个属性,都给出来了,自己去试就行. 下拉刷新 上拉加载 关于下拉刷新-上拉加载的效果,有许许多多的实现方式,百度了一下竟然有几十种 ...
- 自定义ListView下拉刷新上拉加载更多
自定义ListView下拉刷新上拉加载更多 自定义RecyclerView下拉刷新上拉加载更多 Listview现在用的很少了,基本都是使用Recycleview,但是不得不说Listview具有划时 ...
- ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多
ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多 package com.example.ListViewDragItem; import android.app.Ac ...
随机推荐
- centos下 apache+mysql+php的安装
一.安装 MySQL 首先来进行 MySQL 的安装.打开超级终端,输入: [root@localhost ~]# yum install mysql mysql-server 安装完毕,让 MySQ ...
- Python作业之工资管理
作业之工资管理 工资管理实现要求: 工资管理系统 Alex 100000 Rain 80000 Egon 50000 Yuan 30000 -----以上是info.txt文件----- 实现效果: ...
- easyui datagrid 动态表头2
前端 function goqry() { $("#form").form("submit", { url: "CJCK_bjcjfx_yfsl.as ...
- node之fs模块
前言 fs是filesystem的缩写,该模块提供本地文件的读写能力,基本上是POSIX文件操作命令的简单包装.但是,这个模块几乎对所有操作提供异步和同步两种操作方式,供开发者选择. 一.文件读取 文 ...
- .net通用CMS快速开发框架——问题1:Dapper通用的多表联合分页查询怎么破?
最近在弄一个东东,类似那种CMS的后台管理系统,方便作为其它项目的初始化框架用的. 现在遇到个问题,如标题所示:Dapper通用的多表联合分页查询怎么破? 难道只能通过拼接sql或者使用存储过程吗?我 ...
- css文本超出省略号
终于完成了项目了,今天我就分享自己在项目中比较实用的一些功能的实现,第一个就是纯css文本超出省略号 /* 文本单行超出省略号 */ .textels { overflow: hidden; text ...
- Matlab 编译EXE
环境:vs2013 matlab2015b 一.生成独立可执行的程序(exe文件)步骤1.设置编译器.在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器. ...
- 下篇:python的基本数据类型以及对应的常用方法(列表、元组、字典、集合)
为了日后便于查询,本文所涉及到的所有命令集合如下: python中的基本数据类型有数字.字符串.布尔值.列表.元组.字典.就像每一个职业有自己特定的技能,比如医生能看病,农民能种田,每种数据类型也有属 ...
- 通过ajax和spring 后台传输json数据
在通过ajax从页面向后台传数据的时候,总是返回415(Unsupported media type)错误,后台无法获取数据.如下图所示: 在尝试解决这个问题的时候,我们首先要理解一下概念: @req ...
- JVM初探- 使用堆外内存减少Full GC
JVM初探-使用堆外内存减少Full GC 标签 : JVM 问题: 大部分主流互联网企业线上Server JVM选用了CMS收集器(如Taobao.LinkedIn.Vdian), 虽然CMS可与用 ...