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

  

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

  

  

<强> 1,如何判断RecyclerView是在上滑还是下滑

  

在RecyclerView的OnScrollListener滑动事件监听中有个好用的方法,就是onScrolled (RecyclerView RecyclerView, int dx, dy int),其中根据dx的值的正负就可以判断是在左滑还是右滑,而根据dy的值就可以判断是在上滑还是下滑。

     //上滑   如果(dy> 0) {//相应操作代码   }//下滑   else if (dy<0) {//相应操作代码   }      

<强> 2,如何判断是否滑到了顶部或者底部

  

同样在RecyclerView的OnScrollListener滑动事件监听中onScrolled (RecyclerView RecyclerView, int dx, dy int)方法中处理,根据canScrollVertically (int方向)来进行判断。

     //是否滑到底部   如果(! recyclerView.canScrollVertically (1)) {//相应处理操作   }//是否滑到顶部   如果(! recyclerView.canScrollVertically (1)) {//相应处理操作   }      

<强> 3,自定义RecyclerView

  

知道了滑动事件的判断和处理,就可以很轻松得实现下拉刷新和加载更多了。
  

        进口android.content.Context;   进口android.support.annotation.Nullable;   进口android.support.v7.widget.RecyclerView;   进口android.util.AttributeSet;   进口android.util.Log;/* *   *包:com.liuting.library   *作者:流亭   *日期:2017/2/14   *描述:自定义RecycleView,下拉刷新以及上拉加载更多   */公开课RefreshLoadMoreRecycleView延伸RecyclerView {   私人布尔isLoadMore;//是否可以加载更多标志   私人布尔isLoadEnd;//加载到最后的标志   私人布尔isLoadStart;//顶部的标志   私人布尔isRefresh;//是否可以下拉刷新标志   私人int lastVisibleItem;//最后一项   私人IOnScrollListener侦听器;//事件监听      公共RefreshLoadMoreRecycleView(上下文语境){   超级(上下文);   init(上下文);   }      公共RefreshLoadMoreRecycleView(上下文语境,@Nullable AttributeSet attrs) {   超级(上下文,attrs);   init(上下文);   }      公共RefreshLoadMoreRecycleView(上下文语境,@Nullable AttributeSet attrs, int defStyle) {   超级(上下文、attrs defStyle);   init(上下文);   }      公共空间init(上下文语境){   isLoadEnd=false;   isLoadStart=true;      这一点。addOnScrollListener(新RecyclerView.OnScrollListener () {   @Override   公共空间>   & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   LinearLayout & lt;   xmlns: android=" http://schemas.android.com/apk/res/android "   xmlns:工具=" http://schemas.android.com/tools "   android: id=癅 + id/activity_main”   android: layout_width=" match_parent "   android: layout_height=" match_parent "   android:取向=按怪薄?   工具:上下文=癱om.liuting.refreshloadmorelistview.MainActivity”比;      & lt; com.liuting.library.RefreshLoadMoreRecycleView   android: id=癅 + id/main_recycle_view_data”   android: layout_width=" match_parent "   android: layout_height=" match_parent "   android:滚动条="没有"/比;   & lt;/LinearLayout>      之前      

<强> 2,定义RecyclerView.Adapter

  

RecyclerView.Adapter在这里就简单处理了,列表布局直接使用Android自带的。

        进口android.content.Context;   进口android.support.v7.widget.RecyclerView;   进口android.view.LayoutInflater;   进口android.view.View;   进口android.view.ViewGroup;   进口android.widget.TextView;      进口并不知道;/* *   *包:com.liuting.refreshloadmorelistview.adapter   *作者:流亭   *日期:2017/2/16   *描述:列表适配器   */公开课RefreshLoadMoreRecycleAdapter延伸RecyclerView.Adapter{   私人List列表;   私人上下文语境;      公共RefreshLoadMoreRecycleAdapter(上下文语境,List列表){   这一点。上下文=上下文;   这一点。列表=;   }      @Override   公共RefreshLoadMoreRecycleAdapter.ViewHolder>   进口android.app.ProgressDialog;   进口android.os.Bundle;   进口handler;   进口android.os.Message;   进口android.support.v7.app.AppCompatActivity;   进口android.support.v7.widget.LinearLayoutManager;   进口android.widget.Toast;      进口com.liuting.library.RefreshLoadMoreRecycleView;   进口com.liuting.refreshloadmorelistview.adapter.RefreshLoadMoreRecycleAdapter;      进口java.util.ArrayList;   进口并不知道;      公共类MainActivity AppCompatActivity延伸实现RefreshLoadMoreRecycleView.IOnScrollListener {   私人RefreshLoadMoreRecycleView recycleView;//下拉刷新recycleView   私人List

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