博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
监听RecyclerView滑动到末端
阅读量:6992 次
发布时间:2019-06-27

本文共 3863 字,大约阅读时间需要 12 分钟。

监听RecyclerView滑动到末端

效果图

P1P2P3

实现

1. 添加滑动到末端的接口

package com.kongqw.recyclerviewdemo;/** * Created by kongqw on 2016/2/14. */public interface OnBottomListener {
public void onBottom();}

2. 重写RecyclerView.OnScrollListener

package com.kongqw.recyclerviewdemo;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;/** * Created by kongqw on 2016/2/14. */public class OnRecyclerViewScrollListener extends RecyclerView.OnScrollListener implements OnBottomListener {
public enum LAYOUT_MANAGER_TYPE { LINEAR, GRID, STAGGERED_GRID } /** * layoutManager的类型(枚举) */ protected LAYOUT_MANAGER_TYPE layoutManagerType; /** * 最后一个的位置 */ private int[] lastPositions; /** * 最后一个可见的item的位置 */ private int lastVisibleItemPosition; /** * 当前滑动的状态 */ private int currentScrollState = 0; @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); if (layoutManagerType == null) { if (layoutManager instanceof LinearLayoutManager) { layoutManagerType = LAYOUT_MANAGER_TYPE.LINEAR; } else if (layoutManager instanceof GridLayoutManager) { layoutManagerType = LAYOUT_MANAGER_TYPE.GRID; } else if (layoutManager instanceof StaggeredGridLayoutManager) { layoutManagerType = LAYOUT_MANAGER_TYPE.STAGGERED_GRID; } else { throw new RuntimeException("Unsupported LayoutManager used. Valid ones are LinearLayoutManager, GridLayoutManager and StaggeredGridLayoutManager"); } } switch (layoutManagerType) { case LINEAR: lastVisibleItemPosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition(); break; case GRID: lastVisibleItemPosition = ((GridLayoutManager) layoutManager).findLastVisibleItemPosition(); break; case STAGGERED_GRID: StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager; if (lastPositions == null) { lastPositions = new int[staggeredGridLayoutManager.getSpanCount()]; } staggeredGridLayoutManager.findLastVisibleItemPositions(lastPositions); lastVisibleItemPosition = findMax(lastPositions); break; } } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); currentScrollState = newState; RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); int visibleItemCount = layoutManager.getChildCount(); int totalItemCount = layoutManager.getItemCount(); if ((visibleItemCount > 0 && currentScrollState == RecyclerView.SCROLL_STATE_IDLE && (lastVisibleItemPosition) >= totalItemCount - 1)) { onBottom(); } } @Override public void onBottom() { // Log.d(TAG, "滑动到了底部"); } private int findMax(int[] lastPositions) { int max = lastPositions[0]; for (int value : lastPositions) { if (value > max) { max = value; } } return max; }}

3. 回调

recyclerView.addOnScrollListener(new OnRecyclerViewScrollListener() {    @Override    public void onBottom() {        super.onBottom();        Toast.makeText(getApplicationContext(), "滑动到了末端", Toast.LENGTH_SHORT).show();    }});

转载于:https://www.cnblogs.com/sesexxoo/p/6190446.html

你可能感兴趣的文章
java中的异常
查看>>
mysql查询重复数据
查看>>
Tesseract 引擎翻译
查看>>
Android之复选框对话框
查看>>
【RabbitMQ系列】队列、绑定、交换器
查看>>
Run as ant build每次都执行两次
查看>>
如何在微信公众号下载保存图片??
查看>>
Spring读书笔记——bean解析
查看>>
算法练习(5)数字列表中 连续最大的和
查看>>
C# 导出 不保存 直接显示
查看>>
bzoj4445&&dtoj#2348. 小凸想跑步(convex)
查看>>
常见模块设计--权限管理(一)
查看>>
powerdesigner中实现PDM到MYSQl数据库的转换《转》
查看>>
解决element-ui 中upload组件使用多个时无法绑定对应的元素
查看>>
[Docker]容器镜像
查看>>
stl学习之模板
查看>>
CentOS-7.3.1611编译安装 Nginx-1.12.1+mysql-5.7.19+PHP-7.1.8+zabbix-3.4.1
查看>>
元学习 - Learning How to Learn - 第一课:集中与发散思维
查看>>
一种具有细节保留功能的磨皮算法。
查看>>
排序算法7--选择排序--堆排序
查看>>