android - 在 android 回收器 View 中确定快照结束事件

标签 android kotlin android-recyclerview

我正在使用 LinearSnapHelper 捕捉到回收器 View 中的下一个项目。 如果捕捉成功,我需要采取行动。成功是指 snap 成功显示了下一个项目。因此,我正在寻找一个表明快照成功并显示下一个项目的事件。有没有这样的事件我可以听,采取适当的行动。

最佳答案

您可以为此使用自定义的 RecyclerView.OnScrollListenerfindSnapView 通过在 SnapHelper

上做扩展功能
fun SnapHelper.getSnapPosition(recyclerView: RecyclerView): Int {
    val layoutManager = recyclerView.layoutManager ?: return RecyclerView.NO_POSITION
    val snapView = findSnapView(layoutManager) ?: return RecyclerView.NO_POSITION
    return layoutManager.getPosition(snapView)
}

这里是完整的代码

创建一个接口(interface)作为回调

interface OnSnapPositionChangeListener {
fun onSnapPositionChange(position: Int)
}

覆盖 RecyclerView.OnScrollListener()

class SnapOnScrollListener(private var mSnapHelper: SnapHelper, private var mOnSnapPositionChangeListener: OnSnapPositionChangeListener) : RecyclerView.OnScrollListener() {
private var snapPosition = RecyclerView.NO_POSITION

override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
    val snapPosition = mSnapHelper.getSnapPosition(recyclerView)
    val snapPositionChanged = this.snapPosition != snapPosition && snapPosition != RecyclerView.NO_POSITION
    if (snapPositionChanged) {
        mOnSnapPositionChangeListener
                .onSnapPositionChange(snapPosition)
        this.snapPosition = snapPosition
    }

}
}

      var  helper = LinearSnapHelper()
        recyclerview.onFlingListener = null
        helper.attachToRecyclerView(recyclerview)


recyclerview.addOnScrollListener( SnapOnScrollListener(helper, object : OnSnapPositionChangeListener {
        override fun onSnapPositionChange(position: Int) {
            //your code

        }
    }))

关于android - 在 android 回收器 View 中确定快照结束事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56204893/

相关文章:

java - Inflate NavigationView 在 Android 4.4 及更低版本中导致异常

android - Kotlin - 如何创建类似于 TextView.setText(String) 的类成员函数,可以调用为 TextView.text = ""

java - smoothScrollTo(position) 滚动到底部而不是 RecyclerView 中的目标位置

java - RecyclerView GridLayoutManager 和动态行高

android - 加载 15 个图像时出现 18662412 字节分配错误导致内存不足

android - Google Play 商店中有多个版本的应用

java - 如何让你的 Android 应用程序只请求一次 super 用户访问权限?

kotlin - 如何截断 Kotlin 持续时间?

android - Recyclerview 不保留我的滚动位置

android - React Native 3 按钮和 3 模态