美文网首页哈哈哈
2020-08-19 通过反射停止RecyclerView的惯性

2020-08-19 通过反射停止RecyclerView的惯性

作者: 兣甅 | 来源:发表于2020-08-19 20:40 被阅读0次

为什么会有这个需求呢?

因为经常快速上拉,会导致加载更多,加载更多完成后还会触发惯性滚动,于是找了一圈的停止惯性滚动都没有彻底解决(也有可能是使用时机不对),网上找到的方法如下:
https://blog.csdn.net/qq_33829413/article/details/78680168
https://www.jianshu.com/p/22aeddabbab0
自己也尝试过调用RecyclerView的stopScroll方法,scrollBy等都没办法彻底停止

于是看了一下RecyclerView的内部情况,在AndroidxRecyclerView发现有个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()
  }
}

相关文章

网友评论

    本文标题:2020-08-19 通过反射停止RecyclerView的惯性

    本文链接:https://www.haomeiwen.com/subject/viidjktx.html