首页 > 解决方案 > Android Kotlin - 获取 RecyclerView onBindViewHolder 内的 View 与屏幕顶部之间的距离

问题描述

Log.d(tagg, "test1: " + holder.commentsLoading.top.toString())
holder.scrollView.setOnScrollChangeListener(NestedScrollView.OnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
    lastPosUpdate(meme.id, scrollY)
    Log.d(tagg, "test2: " + holder.commentsLoading.top.toString())
})

holder.textUserComments.setOnClickListener {
    Log.d(tagg, "test3: " + holder.commentsLoading.top.toString())
}

test2并且test3无论我滚动并更改实际位置,都显示相同的位置,test1返回 0,这到底是怎么回事!?

标签: androidkotlinandroid-recyclerview

解决方案


我假设您在 onCreateViewHolder 中有该代码(这解释了您的问题)。recyclerView 背后的机制是它只创建尽可能多的 ViewHolder/Views 来填充全屏(大约) - 然后回收视图。出于这个原因,一个 Viewholder 只会被创建一次。test1 只会被评估一次。相反,由于无论视图被回收多少次都会调用您的侦听器,因此您将获得正确的位置。

更改此代码:

Log.d(tagg, "test1: " + holder.commentsLoading.top.toString())

到 onBindViewHolder,你的问题就解决了。


推荐阅读