介绍
怎么在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添加一个下滑功能