RecyclerView预加载,kotlin库

本文介绍了RecyclerView的预加载实现,通过分析滚动监听和LayoutManager的使用,提出了在Adapter中判断预加载的方法,解决了滚动速度导致的预加载不触发或多次触发的问题,降低了与LayoutManager的耦合。
摘要由CSDN通过智能技术生成

super.onScrolled(recyclerView, dx, dy)

// 获取 LayoutManger

val layoutManager = recyclerView.layoutManager

// 如果 LayoutManager 是 LinearLayoutManager

if (layoutManager is LinearLayoutManager) {

/
/ 如果列表正在往上滚动,并且表项最后可见表项索引值 等于 预加载阈值

if (dy > 0 && layoutManager.findLastVisibleItemPosition() == layoutManager.itemCount - 1 - preloadCount) {

onPreload()

}

}

}

})

}

当列表滚动时,实时检测列表中最后一个可见表项索引 和 预加载阈值 是否相等,若相等则表示列表快滚动到底部了,则触发预加载回调。

然后就可以像这样实现预加载:

recyclerView.addOnPreloadListener(3) {// 当距离列表底部还有 3 个表项时执行预加载

// 预加载业务逻辑

}

一运行 Demo 就测出 bug:当快速滚动列表时onPreload()没有执行,当慢慢滚动列表时onPrelaod()会执行多次。

原因是RecyclerView并不保证每个表项出现时onScrolled()都会被调用,若滚动非常快,某个表项错过该回调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值