我正在使用 LinearSnapHelper 捕捉到回收器 View 中的下一个项目。 如果捕捉成功,我需要采取行动。成功是指 snap 成功显示了下一个项目。因此,我正在寻找一个表明快照成功并显示下一个项目的事件。有没有这样的事件我可以听,采取适当的行动。
最佳答案
您可以为此使用自定义的 RecyclerView.OnScrollListener
和 findSnapView
通过在 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/