美文网首页哈哈哈
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