使用OnScrollListener回调处理自动加载更多

Android——RecyclerView自定义OnScrollListener实现下拉刷新监听,上拉加载更多功能 目录 【前言】 1、OnScrollListener滑动事件监听抽象类 2、利用onScrollStateChanged及onScrolled方法实现下拉刷新及上拉加载更多 3、使用方法 4、利用SwipeRefreshLayout实现下拉刷新效果 【前言】 针对RecyclerView有很多开源的框架可以直接拿来用,比较有代表性的是BaseRecyclerViewAdapterHe... 阅读详情

首先来分析下OnScrollListener的回调,

new OnScrollListener() {    
        boolean isLastRow = false;    
        
        @Override    
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {    
            //滚动时一直回调,直到停止滚动时才停止回调。单击时回调一次。    
            //firstVisibleItem:当前能看见的第一个列表项ID(从0开始)    
            //visibleItemCount:当前能看见的列表项个数(小半个也算)    
            //totalItemCount:列表项共数    
        
            //判断是否滚到最后一行    
            if (firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount > 0) {    
                isLastRow = true;    
            }    
        }    
        @Override    
        public void onScrollStateChanged(AbsListView view, int scrollState) {    
            //正在滚动时回调,回调2-3次,手指没抛则回调2次。scrollState = 2的这次不回调    
            //回调顺序如下    
            //第1次:scrollState = SCROLL_STATE_TOUCH_SCROLL(1) 正在滚动    
            //第2次:scrollState = SCROLL_STATE_FLING(2) 手指做了抛的动作(手指离开屏幕前,用力滑了一下)    
            //第3次:scrollState = SCROLL_STATE_IDLE(0) 停止滚动             
            //当屏幕停止滚动时为0;当屏幕滚动且用户使用的触碰或手指还在屏幕上时为1;  
            //由于用户的操作,屏幕产生惯性滑动时为2  
        
            //当滚到最后一行且停止滚动时,执行加载    
            if (isLastRow && scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {    
                //加载元素    
                ......    
        
                isLastRow = false;    
            }    
        }    
    }  


项目开发中给listview添加一个footview的加载的自定义布局,如果还添加了headview的话,上面的代码需要修改下

把

totalItemCount > 0改成<pre name="code" class="java">totalItemCount > 2

 

然后在onScrollStateChange方法里面去加载数据的时候,加载完成listview的adapter去notify数据。

但是项目开发中发现个bug问题,就是加载的时候会加载两遍,分析原因发现onScroll方法执行了两次,就是在onScrollStateChange方法里的isLastRow被赋值为false后,然后onScroll方法又赋值成了true,所以会导致在onScrollStateChange方法里的加载数据会执行两遍,用什么方法解决呢?

我想到的方法是设置个全局变量,loading = true/false,表示还没加载完数据并且adapter没notify完成数据前loading为true,否则为false。但是listview的adapter如何知道notify数据完成了,我没发现有相关的Listener监听方法可以回调adapter的notify完成。但是我们知道每次notify数据的时候都会执行adapter里面的getview方法,特别是加载增加了数据列表时,所以我决定在getview方法里面添加

if(datas.size()-1==position){
       loading = false;
}

这样可以解决问题,如果有网友知道更好的方法,还请留言,感激不尽!





Android——使用自定义OnScrollListener实现下拉刷新和上拉加载更多功能 在refreshData()方法中,可以执行下拉刷新的操作,例如发送网络请求刷新数据,并更新RecyclerView的适配器。在onScrolled()方法中,通过判断滑动位置和总的item数量,来触发加载更多的操作。在实际开发中,你还可以根据项目的需求进行一些优化和扩展,例如添加加载失败的处理、优化加载更多的触发条件等。接下来,我们来实现下拉刷新的功能。在onLoadMore()方法中,可以执行上拉加载更多的操作,例如发送网络请求获取更多数据,并更新RecyclerView的适配器。 阅读详情

相关推荐

listview的setOnScrollListener一些用法

listview的setOnScrollListener一些用法

android RecyclerView的滚动事件OnScrollListener详解

RecyclerView.canScrollVertically(-1)的值表示是否能向上滚动,false表示已经滚动到顶部。其中,direction为 -1 表示手指向下滑动(屏幕向上滑动), 1 表示手指向上滑动(屏幕向下滑动)。2.手指按下 -> 手指快速拖拽后抬起手指 -> 列表继续滚动 -> 停止滚动。1.手指按下 -> 手指拖拽列表移动 -> 手指停止拖拽 -> 抬起手指。dx > 0 时为手指向左滚动,列表滚动显示右面的内容。dy > 0 时为手指向上滚动,列表滚动显示下面的内容。

安卓兼职framework和app工程师的博客 1万+

ANSYS Help USER300

USER 300概述单元描述输入数据假设与限制条件 概述 单元描述 Mechanical APDL提供了一种方便的方法来创建自定义的单元,命名为USER300,可以创建几乎任何单元类型。 UserElem子程序为Mechanical APDL在单元类型创建上提供了一个接口,可传递用户自定义单元创建时所需的所有数据,然后从自定义单元返回所有数据和结果,以更新数据库和文件。因为通过接口可以访问数据库和文件信息,所以很少需要了解Mechanical APDL数据库程序和文件结构。该接口还提供了获取Mechanic

weixin_47019765的博客 2235

android listView的setOnScrollListener的使用

今天,简单讲讲如何使用  listView的setOnScrollListener。 ListView是Android中最常用的控件之一,随着时代发展,RecyclerView有取代它的趋势,但是在一些老代码中,ListView依然扮演着重要的作用。 项目中遇到一个需求,需要监听ListView在滑动时滑动的Y轴坐标。这个需求在RecyclerView中computeVerti

谢岩的博客 3909

双臂复合机器人眼在手外标定实战:从原理到D435标定流程详解

本文详细解析了双臂复合机器人中眼在手外标定的核心原理与实战流程。通过阐述坐标系转换与AX=XB方程,重点介绍了使用Intel RealSense D435相机进行标定的完整步骤,包括环境搭建、数据采集、计算与验证,并提供了关键的避坑指南,帮助工程师实现相机与机械臂基座间的精确坐标对齐。

weixin_29100927的博客 457

避坑指南:QCustomPlot鼠标事件冲突解决方案(左键拖动vs右键框选)

本文深入解析QCustomPlot在QT框架下的高级交互实现,重点解决左键拖动与右键框选的冲突问题。通过自定义事件处理和QRubberBand技术,提供了一套完整的无冲突交互方案,帮助开发者优化数据可视化应用的用户体验。

moss5的博客 661

实用的ListView滑动事件 : setOnScrollListener - 上拉加载 - 下拉刷新

一个简单的ListView 的滑动事件 // listview的滑动事件 listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { ...

zhang_hao_nan的博客 942

CentOS7下通过YUM源高效部署Zabbix7 Agent指南

本文详细指导在已结束生命周期的CentOS7系统上,通过更换YUM源(如阿里云镜像)并添加Zabbix官方仓库,高效部署Zabbix7 Agent。文章涵盖从源配置、软件安装、关键参数修改到服务启动与防火墙设置的全流程,帮助用户解决依赖错误,快速建立服务器监控。

weixin_29230059的博客 269

RecyclerView的滚动事件OnScrollListener研究

(1)滚动事件分类 列表的滚动一般分为两种: 1.手指按下 -> 手指拖拽列表移动 -> 手指停止拖拽 -> 抬起手指 2.手指按下 -> 手指快速拖拽后抬起手指 -> 列表继续滚动 -> 停止滚动 上面的过程的状态变化如下: 1.静止 -> 被迫拖拽移动 -> 静止 2.静止 -> 被迫拖拽移动 -> 自己滚动 -> 静止 (2)监听RecyclerView的滚动

u014748504的博客 1460

使用MATLAB求解二维顶盖驱动流问题的详细代码和说明

本文介绍了使用MATLAB求解二维顶盖驱动流问题的涡量-流函数方法。代码采用129×129网格,雷诺数Re=1000,通过迭代求解Navier-Stokes方程,包含流函数方程和涡量输运方程的离散求解。程序实现了边界条件处理、收敛性检查,并提供丰富后处理功能:流线图、涡量分布图、中心线速度曲线、矢量图和三维涡量可视化。计算结果可与Ghia等(1982)的经典数据进行验证。该代码完整展示了CFD问题的数值求解流程,包括参数设置、主循环计算和多种结果呈现方式,适用于流体力学教学和科研验证。

AI的内部世界的博客 227

强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解

强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解

丨汀、的博客 512

实现Android ListView 自动加载更多内容

研究了几个小时终于实现了Android ListView 自动加载的效果。     说说我是怎样实现的。分享给大家。           1、给ListView增加一个FooterView,调用addFooterView(footer) 这个放方法。     2、给ListView设置OnScrollListener监听器。     3、实现OnScollListener的onScrol

对酒当歌 1万+

同步调相机启动与并网控制技术方案

同步调相机起动与并网控制技术方案采用背靠背变流器系统,通过静止变频器(SFC)策略实现无原动机驱动的同步电机从静止到同步转速的平稳起动。方案详细阐述了硬件自检、模块初始化、转子位置检测等关键环节,重点解决启动转矩为零、冲击电流大等挑战。系统基于STM32或C2000系列控制器,包含网侧/机侧变流器、检测保护单元及通信接口,通过励磁脉冲和电压响应分析实现高精度转子初始定位,为后续并网提供必要条件。代码级实现涵盖了ADC自检、数字IO验证及通信端口测试等核心功能。

huanghm88的专栏 308

Android中OnScrollListener回调具体剖析 OnScrollListener回调分析

new OnScrollListener() { boolean isLastRow = false; @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { //滚动时一直回调,直到停止滚动时才停止回调。单击时回调一

wubaopeng的专栏 670

SAP 实施:Waterfall vs. Agile —— 一场“结构性矛盾“的深刻比较先说结论:在 SAP 世界里,这从来不是“谁更好“的宗教问题,而是“你的项目 DNA 是什么“的战略选择。​

SAP 实施:Waterfall vs. Agile —— 一场"结构性矛盾"的深刻比较 先说结论:在 SAP 世界里,这从来不是"谁更好"的宗教问题,而是"你的项目 DNA 是什么"的战略选择。​ SAP 早已用 SAP Activate​ 给出了官方态度——它不是纯 Agile,也不是回头去搞旧 Waterfall,而是一个带质量门的混合架构。 1. 先回到本质:两者解决的是不同维度的风险 维度 Waterfall(传统 ASAP 路线)​ Agile(SCRUM/Kanban 式迭代)​

金牌架构师 336

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ListView加载更多

主要是对OnScrllListener的使用介绍,有两个方法来监听滑动的状态,onScroll()和onScrollStateChanged()。 new AbsListView.OnScrollListener() { /** *正在滚动时回调,回调2-3次,手指没抛则回调2次。scrollState = 2的这次不回调

月清空的博客 1064

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android上拉分页加载更多,Android实现上拉加载更多ListView(PulmListView)

思路今天带大家实现一个上拉加载更多的ListView.GitHub传送门:PulmListView, 欢迎大家fork&&star.先带大家理一下思路, 如果我们要实现一个上拉加载更多的ListView, 我们需要实现的功能包括:1.一个自定义的ListView, 并且该ListView能够判断当前是否已经处于最底部.2.一个自定义的FooterView, 用于在ListView加...

weixin_39574140的博客 372

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android中OnScrollListener回调具体剖析

Android中OnScrollListener回调具体剖析                                                              OnScrollListener回调分析 new OnScrollListener() { boolean isLastRow = false; @Override public void onSc

善感的人 4995

上拉加载更多 android,使用SwipeRefreshLayout实现下拉刷新与上拉加载更多

SwipeRefreshLayout只能实现下拉刷新,而不能实现上拉加载更多。所以这需要对其进行扩充。1、首先继承SwipeRefreshLayoutpublic class SwipeRefreshAndMoreLoadLayout extends SwipeRefreshLayout implements OnScrollListener {接下来直接替代码了packagecom.examp...

weixin_39860919的博客 824

告别卡顿:RecyclerView预加载实现滑动到底部加载更多完整指南

你是否遇到过滑动列表时突然卡顿的情况?用户体验调研显示,列表加载延迟超过200ms会导致70%的用户流失。本文将通过RecyclerView(循环视图)实现滑动到底部自动加载更多功能,解决这一痛点。读完本文,你将掌握预加载核心原理、避坑指南以及3种实现方案的对比分析。 ## 为什么需要预加载 RecyclerView作为Android开发中最常用的列表控件,默认情况下在滑动到最后一项时才触发加...

gitblog_00935的博客 924

RecyclerView的滚动事件OnScrollListener

RecyclerView的滚动事件OnScrollListener(1)滚动事件分类列表的滚动一般分为两种: 1.手指按下 -&gt; 手指拖拽列表移动 -&gt; 手指停止拖拽 -&gt; 抬起手指 2.手指按下 -&gt; 手指快速拖拽后抬起手指 -&gt; 列表继续滚动 -&gt; 停止滚动上面的过程的状态变化如下:1.静止 -&gt; 被迫拖拽移动 -&gt; 静止 2.静止 -&gt;...

daimengs的博客 4655

ListView上拉加载更多

1 原理图: ListView在滑动的时候,会不断的传递三个值,这三个值为:1 int firstVisibleItem2 int visibleItemCount3 int totalItemCount2 监听ListView的滑动事件1 实现OnScrollListener接口public class MListView extends ListView implements OnScrollL

granton 816

RecyclerView的原生加载更多

----RecyclerView的原生加载更多----------- mRv.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

jie的博客 296

Android实战简易教程-第五十三枪(通过实现OnScrollListener接口实现上拉加载更多功能)

支持上拉加载更多的控件有很多,但是你知道背后的原理吗?有一些面试官可能会问到这方便的知识,他们认为会用不是目的,懂背后的原理才是真人才。下面我们通过实现OnScrollListener接口实现上拉加载更多的效果,这里用到了回调接口,你需要对回调进行比较好的理解,回调机制是Android中很重要的机制,下面我们看一下代码:1.定义一个footer.xml,用于下拉提示的效果: <LinearLayo

张亚运的专栏 4002

OnScrollListener回调分析

new OnScrollListener() {             boolean isLastRow = false;                      @Override             public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int to

水上飞的专栏 391
上一篇: Android保存图片到系统图库
下一篇: ViewPager使用中的一些小问题
fancylovejava
博客等级 码龄16年 1052粉丝 184原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值