在 Kotlin 中向下滚动一定数量后如何显示“Toast”

问题描述

我想在我的应用程序中实现一个功能,当用户向下滚动回收视图时,它会显示 Toast/消息。例如,当用户向下滚动屏幕时,在他们通过大约 10 个项目后会弹出 Toast 说“点击主页按钮返回顶部

我该怎么做?

解决方法

我认为最好基于滚动距离而不是最近出现在屏幕上的项目,因此应显示消息的阈值不取决于屏幕大小。由于关注点分离,最好将此行为排除在适配器之外。

这是您可以用来执行此行为的滚动侦听器。我认为代码是不言自明的。

open class OnScrolledDownListener(
    private val context: Context,private val thresholdDp: Int,var resetOnReturnToTop: Boolean = true
): RecyclerView.OnScrollListener() {
    private var eventFired = false
    private var y = 0

    open fun onScrolledDown() {}
    open fun onScrolledBackToTop() {}
    
    override fun onScrolled(recyclerView: RecyclerView,dx: Int,dy: Int) {
        y += dy
        val yDp = (y / context.resources.displayMetrics.density).roundToInt()
        if (yDp >= thresholdDp && !eventFired) {
            eventFired = true
            onScrolledDown()
        } else if (resetOnReturnToTop && yDp == 0 && eventFired) {
            eventFired = false
            onScrolledBackToTop()
        }
    }
}

您可以子类化和覆盖这两个事件,用于第一次向下滚动至少一定数量时(onScrolledDown),以及当它滚动回顶部并重置自身时({{1 }}).

onScrolledBackToTop
,

我不知道这是否可行,但您可以尝试在您的适配器中执行此操作。喜欢

when (position) {
      10 -> Toast.makeText().show
}

或使用 if 语句。 同样,我不确定它是否会起作用,但我认为是这样。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...