在 RecyclerView.Adapter 类中注册点击监听器后,我必须滚动到位置 X!
class MyAdapter(context: Context, mRV: RecyclerView, mLayoutm: LinearLayoutManager) {
...
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.itemView.XY_button.setOnClickListener { // Button inside a cell
mRV.layoutManager.scrollToPosition(x) // Not work
mRV.scrollToPosition(x) // Not work
mLayoutm.scrollToPosition(x) // Not work
(context as MyRVClass).mRV.mLayoutm.scrollToPosition(x) // Not work
(context as MyRVClass).mRV.scrollToPosition(x) // Not work
// it does't work with smoothScrollToPosition() too
}
}
}
PS:我在 swift/iOS 中用委托(delegate)协议(protocol)解决了这个问题, 我们在 android/Kotlin 中有等效的东西吗?
最佳答案
在 RecyclerView
所在的 Activity 类中创建此方法:
fun scrollToPosition(position: Int) {
rv.scrollToPosition(position)
}
将 rv
替换为 RecyclerView
的 id
并在监听器中添加:
val myActivity: MainActivity = context as MainActivity
myActivity.scrollToPosition(x)
将 MainActivity
替换为 Activity 的名称,并将 x
替换为要滚动到的位置。
关于java - 在 RecyclerView.Adapter 内部滚动到位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52930678/