确定android回收器视图中的快照结束事件

时间:2019-05-19 04:59:43

标签: android kotlin android-recyclerview

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

1 个答案:

答案 0 :(得分:0)

您可以为此使用自定义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 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

        }
    }))