为什么会有这个需求呢?
因为经常快速上拉,会导致加载更多,加载更多完成后还会触发惯性滚动,于是找了一圈的停止惯性滚动都没有彻底解决(也有可能是使用时机不对),网上找到的方法如下:
https://blog.csdn.net/qq_33829413/article/details/78680168
https://www.jianshu.com/p/22aeddabbab0
自己也尝试过调用RecyclerView的stopScroll方法,scrollBy等都没办法彻底停止
于是看了一下RecyclerView的内部情况,在Androidx的RecyclerView发现有个cancelScroll方法(对应Support包里面的是cancelTouch),虽然是private方法,但是难不倒我们,直接上反射调用。测试了一下自己的手机是停止了的,姑且认为这个方法有效吧,下面贴上扩展反射的调用:
//停止惯性滚动
fun RecyclerView.stopInertiaRolling() {
try {
//如果是Support的RecyclerView则需要使用"cancelTouch"
val field = this.javaClass.getDeclaredMethod("cancelScroll")
field.isAccessible = true
field.invoke(this)
} catch (e: Exception) {
e.printStackTrace()
}
}
网友评论