怎么在android中利RecycleView添加一个下滑功能

  介绍

怎么在android中利RecycleView添加一个下滑功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

RecycleView内部有一个滑动监听的抽象类OnScrollListener来接收滚动事件,此类里面有两个实现的方法

public  abstract  static  class  OnScrollListener  {   ,,,/* *   ,,,,*,Callback  method 用be  invoked  when  RecyclerView& # 39; s  scroll  state 变化。   ,,,,   ,,,,*,@param  recyclerView 从而recyclerView  whose  scroll  state  has 改变。   ,,,,*,@param  newState ,,, updated  scroll 国家只One  of  {@link  # SCROLL_STATE_IDLE},   ,,,,*,,,,,,,,,,,{@link  # SCROLL_STATE_DRAGGING},趁机{@link  # SCROLL_STATE_SETTLING}。   ,,,*/,,,public  void  onScrollStateChanged (RecyclerView  recyclerView, int  newState) {}      ,,,/* *   ,,,,*,Callback  method 用be  invoked  when 从而RecyclerView  has  been 滚动只却;能够will    ,,,,*,nbsp; after 从而scroll  has 完成。   ,,,,*,& lt; p>   ,,,,*,却;能够callback  will  also  be  nbsp; if  visible  item  range  changes  after  a 布局   ,,,,*,计算只that 情况下,拷贝,dx 以及dy  will  be  0。   ,,,,   ,,,,*,@param  recyclerView 从而recyclerView  which 滚动。   ,,,,*,@param  dx 从而amount  of  horizontal 滚动。   ,,,,*,@param  dy 从而amount  of  vertical 滚动。   ,,,*/,,,public  void  onScrolled (RecyclerView  recyclerView, int  dx, int  dy) {}   以前,,}

通多源码的注释可以了解到

onScrollStateChanged当recyclerview的滚动状态发生变化的时候调用。

onScrolled在布局可见和recycleview滚动的时候调用。

那么思路就是:

(1)在onScrollStateChanged方法中判断当前的滚动状态是停止滚动的状态。

(2)然后根据api中的方法获得最后可见的位置。

(3)判断当前可见的recycleview中项的条数大于0

(4)判断最后可见的位置大于数大于总项数减一

(5)并且项目的总数大于可见的物品这样可以保证超过一个界面的时候才执行。

当满足让面的要求的时候我们就可以通过接口回调执行我们的耗时逻辑,并显示出加载的对话框。

因为recyclerview可以通过layoutManager灵活的转换成列的表,表格,和瀑布流。尤其是瀑布流的时候,它的最后可见的位置是不一样的,所以我们必须根据其不同的layoutManager状态获取相对应的最后可见位置。

代码:

, @Override   public 才能;void  onScrollStateChanged (int 状态),{   ,,,if  (state ==, RecyclerView.SCROLL_STATE_IDLE ,,, mLoadingListener  !=, null), {   ,,,,,LayoutManager  LayoutManager =, getLayoutManager ();   ,,,,,int  lastVisibleItemPosition;   ,,,,,if  (layoutManager  instanceof  GridLayoutManager), {   ,,,,,,,lastVisibleItemPosition =, ((GridLayoutManager), layoutManager) .findLastVisibleItemPosition ();   ,,,,,},else  if  (layoutManager  instanceof  StaggeredGridLayoutManager), {   ,,,,,,,int [], into =, new  int (((StaggeredGridLayoutManager), layoutManager) .getSpanCount ());   ,,,,,,,((StaggeredGridLayoutManager), layoutManager) .findLastVisibleItemPositions(进);   ,,,,,,,lastVisibleItemPosition =, findMax(进);   ,,,,,},{else    ,,,,,,,lastVisibleItemPosition =, ((LinearLayoutManager), layoutManager) .findLastVisibleItemPosition ();   ,,,,,}   ,,,,,if  (layoutManager.getChildCount(),祝辞,0   ,,,,,,,,,,,,lastVisibleItemPosition 祝辞=,layoutManager.getItemCount(),安康;1,,,,layoutManager.getItemCount(),祝辞,layoutManager.getChildCount ()), {   ,,,,,,,,,View  footView =, mFootViews.get (0);   ,,,,,,,footView.setVisibility (View.VISIBLE);   null   null   null   null   null   null   null   null   null   null   null   null

怎么在android中利RecycleView添加一个下滑功能