RecyclerView下拉刷新和上拉加载越多

后天到底有一点点时间,来写了刹那间:
为RecyclerView落成下拉刷新和上拉加载越多。明日会在眼下的两篇随笔的底子上:
RecyclerView系列之(1):为RecyclerView添加Header和Footer
RecyclerView系列之(2):为RecyclerView增加分隔线
持续呈报RecyclerView中有个别常用组件的贯彻下拉刷新和上拉加载越多的功力。
在当今的Android手提式有线电话机应用中,差十分的少每多少个应用程式都有下拉刷新和上拉加载更加的多的效果与利益,它们的重大总来讲之。

先十分的少说,先看功能图:

图片 1

下拉刷新作用图

图片 2

上拉加载更加多效果与利益图

下拉刷新和上拉加载那八个职能,蓬蓬勃勃在那以前给人的认为到正是它们是三个整合,它们之间是还是不是存在怎么样关联,可是其实,达成的秘技是天渊之别等的。下边笔者将组成宗旨部分代码来说一下它们的落到实处。

风流倜傥. 得以完结下拉刷新
在google的android.support.v4包中,提供叁个SwipeRefreshLayout方法,
用于完毕下拉刷新,达成的长河也极度轻便,
那大家先来看一下SwipeRefreshLayout是何许事物,其实从名字上来看,它就是叁个刷新布局,大家来看它的后续结构图:

图片 3

SwipeRefreshLayout的继续构造图

从上边的持续构造得以见到, 它一连于:ViewGroup.
而我们遍布的LinearLayout,
GridLayout等大面积的构造,也是后续于ViewGroup。所以它的使用方法和大家广阔的大半,大家想要刷新下拉刷新大家的RecyclerView,
这大家将在将我们的RecyclerView构造文件放到SwipeLayout中。

而在SwipeRefleshLayout中,它又提供了一个接口:SwipeRefreshLayout.OnRefreshListener,
何况在此个口里面提供了三个虚幻方法:onRefresh(), 到那边,
大家差不离知道它是怎么运营的了,大家只需求在Activity中,达成那些接口,并且完结OnRefresh(卡塔尔方法就可以,在onReflesh(卡塔尔(قطر‎方法中,进行我们的刷新数据操作,下边直接来看主要代码:

在主布局中的文件:加入以下代码:

<android.support.v4.widget.SwipeRefreshLayout
 android:id="@+id/layout_swipe_refresh"
 android:layout_width="match_parent"
 android:layout_height="match_parent">

 <android.support.v7.widget.RecyclerView
 android:id="@+id/recyclerview"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 </android.support.v7.widget.RecyclerView>
</android.support.v4.widget.SwipeRefreshLayout>

不畏SwipeRefreshLayout中带有大家的recyclerView

在Activity中

兑现以下基本代码:

1.开立三个SwipeRefreshLayout对象,在onCreate(卡塔尔(英语:State of Qatar)方法中初阶化
mRefreshLayout =
(SwipeRefreshLayout)findViewById(R.id.layout_swipe_refresh);
2.为其丰盛SwipeRefreshLayout.OnRefreshListener事件:

mRefreshLayout.setOnRefreshListener(new OnRefreshListener(){
 public void onRefresh() {
  //我在List最前面加入一条数据
 mData.add(0, "嘿,我是“下拉刷新”生出来的");

 //数据重新加载完成后,提示数据发生改变,并且设置现在不在刷新
 mAdapter.notifyDataSetChanged();
 mRefreshLayout.setRefreshing(false);
 }
});

到那边,就兑现了下拉刷新的法力,具体的艾达pter的落到实处,分隔线的投入,请看自个儿前边的两篇作品,恐怕是看后边附带的源码
这么,大家就完结了下拉刷新的职能,下边再来实现上拉加载越多的效用。

二. 上拉加载更加的多

上拉加载,主要达成的是一个好像分页的法力,无法一初阶的时候就加载全体数目,假诺数据相当多,或然是网络速度慢的话,那亟需比较久的时刻技艺加载成功。而上拉加载的考虑是:笔者风姿罗曼蒂克开头的时候,就给您加载四十条数据左右,假若你还想看上边包车型地铁多少的画,再度开展加载八十条,分批次加载,那样就进级了顾客体验。

下边在RecyclerView中,提供了别的三个监听接口:RecyclerView.OnScrollListener
咱俩得以因此那个接口来创建大家上拉加载越来越多的功能。

直接通过代码来精晓,代码上也许有比较详细的解析

package com.study.wnw.recyclerviewrefresh;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;

/** * Created by wnw on 16-5-26. */
public abstract class EndLessOnScrollListener extends RecyclerView.OnScrollListener{

 //声明一个LinearLayoutManager
 private LinearLayoutManager mLinearLayoutManager;

 //当前页,从0开始 private int currentPage = 0;
 //已经加载出来的Item的数量
 private int totalItemCount;

 //主要用来存储上一个totalItemCount
 private int previousTotal = 0;

 //在屏幕上可见的item数量
 private int visibleItemCount;

 //在屏幕可见的Item中的第一个
 private int firstVisibleItem;

 //是否正在上拉数据
 private boolean loading = true;

 public EndLessOnScrollListener(LinearLayoutManager linearLayoutManager) {
 this.mLinearLayoutManager = linearLayoutManager;
 }

 @Override
 public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
 super.onScrolled(recyclerView, dx, dy); 

 visibleItemCount = recyclerView.getChildCount();
 totalItemCount = mLinearLayoutManager.getItemCount();
 firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition();
 if(loading){
  //Log.d("wnwn","firstVisibleItem: " +firstVisibleItem);
  //Log.d("wnwn","totalPageCount:" +totalItemCount); 
  //Log.d("wnwn", "visibleItemCount:" + visibleItemCount);

  if(totalItemCount > previousTotal){
  //说明数据已经加载结束
  loading = false;
  previousTotal = totalItemCount;
  } 
 }
 //这里需要好好理解
 if (!loading && totalItemCount-visibleItemCount <= firstVisibleItem){
  currentPage ++;
  onLoadMore(currentPage);
  loading = true;
 }
 }

 /**
 * 提供一个抽闲方法,在Activity中监听到这个EndLessOnScrollListener
 * 并且实现这个方法
 * */
 public abstract void onLoadMore(int currentPage);}

在地点的代码中,须要留意的正是通晓:visibleItemCount, totalItemCount,
firstVisibleItem那多少个单词的意味,
在代码里看解析,如若看不懂,能够在程序内打Log,滑动屏幕,看Log,
那样来领悟比较好理解

监听器已经弄好了,接下去,大家正是在Activity中为RecyclerView加多这些监听器,完毕抽象方法onLoadMore(卡塔尔(英语:State of Qatar)那样就可以了。下边看主要代码:

mRecyclerView.addOnScrollListener(new EndLessOnScrollListener(mLinearLayoutManager) {
 @Override
 public void onLoadMore(int currentPage) {
 loadMoreData();
 }
});

地点的主次中loadMoreData(卡塔尔(قطر‎方法为:

//每次上拉加载的时候,给RecyclerView的后面添加了10条数据数据
private void loadMoreData(){
 for (int i =0; i < 10; i++){
 mData.add("嘿,我是“上拉加载”生出来的"+i);
 mAdapter.notifyDataSetChanged();
 }
}

到此处,整个RecyclerView增添下拉刷新和上拉加载的效果与利益就达成了,具体源码:请看github地址:
源码下载.

到此处,大家的总体RecyclerView类别之(3卡塔尔(قطر‎就完结了,
那三篇小说,它能实现的,ListView都得以成功,并不曾呈现出RecyclerView的灵活性,关于RecyclerView的圆滑,
非常多个人会想到八个词:瀑布流,看下图

图片 4

图片源于于互联网

而下意气风发篇小说作者会带来RecyclerView瀑布流的贯彻,谢谢咯。

如上正是本文的全体内容,希望对大家的读书抱有助于,也可望大家多多关照脚本之家。

你恐怕感兴趣的篇章:

  • Android达成上拉加载更加多甚至下拉刷新作用(ListView)
  • Android RecyclerView
    上拉加载越多及下拉刷新作用的兑现方式
  • Android
    ListView落成上拉加载更加的多和下拉刷新功用
  • Android下拉刷新上拉加载越多左滑动删除
  • Android
    XListView下拉刷新和上拉加载更加的多
  • Android
    RecyclerView完成下拉刷新和上拉加载越来越多
  • Android
    仿硅谷新闻下拉刷新/上拉加载越来越多
  • Android中Listview下拉刷新和上拉加载越来越多的各种完毕方案
  • android使用PullToRefresh框架实现ListView下拉刷新上拉加载越多
  • Android实施之带加载效果的下拉刷新上拉加载越多

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注