Android Kotlin-获取RecyclerView onBindViewHolder内部视图和屏幕顶部之间的距离

Android Kotlin-获取RecyclerView onBindViewHolder内部视图和屏幕顶部之间的距离,android,kotlin,android-recyclerview,Android,Kotlin,Android Recyclerview,test2和test3显示相同的位置,无论我滚动并更改实际位置,test1返回0,这到底是怎么回事 我假设您在onCreateViewHolder中包含该代码(这解释了您的问题)。recyclerView背后的机制是,它只创建尽可能多的ViewHolder/视图来填充一个全屏(大约),然后回收视图。因此,Viewholder将只创建一次。test1将只评估一次。相反,无论视图被循环多少次,您的侦听器都会被调用,因此您得到了正确的位置 更改此代码: Log.d(tagg,“test1:+holde

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

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

更改此代码:

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


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

显示适配器代码请发布您的适配器代码,以便于更好地理解。我编辑了它,请检查它不是在onCreateViewHolder中,而是在onBindViewHolder中,正如标题所说的那样。也许最好描述一下您想要做什么。在样本中不清楚我编辑了标题:D首先问题是如果没有任何监听器中的代码,我无法获得到屏幕顶部的距离,然后我意识到View.top函数只显示到父屏幕顶部的距离,而不是screenYes,commentsLoading是viewHolder的itemView中的一个视图,因此其顶部位置与recyclerview无关。那么,你的问题解决了吗?
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())
}