换一个思路,超简单的RecyclerView预加载,androidwifi开发框架

本文介绍了如何实现RecyclerView的类型无关预加载,避免在快速滚动时错过预加载回调,并防止用户在列表底部多次上拉导致预加载被多次触发。通过在onBindViewHolder中检查预加载条件,确保每个表项至少有一次机会触发预加载,同时添加预加载状态标记位来防止重复预加载。
摘要由CSDN通过智能技术生成

}
}
}
})
}

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

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

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

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

为了避免错过,只能放宽条件:

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

==改成>=,条件是放宽了,但多次调用的问题更加严重了。在正常滑动过程中,这个方案无法做到精准匹配预加载阈值,即无法实现只回调一次onPreload(),因为onScroll()是像素粒度的回调,而预加载要做的表项粒度的检测。

这个方案还有一个缺点:和LayoutManager类型耦合。代码中使用了if (layoutMan

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值