在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中使用委托协议解决了这个问题, 我们在android / Kotlin中有等同的东西吗?
答案 0 :(得分:1)
在您的活动的班级中创建此方法,其中RecyclerView
为:
fun scrollToPosition(position: Int) {
rv.scrollToPosition(position)
}
用rv
的ID替换RecyclerView
并在侦听器中添加以下内容:
val myActivity: MainActivity = context as MainActivity
myActivity.scrollToPosition(x)
将MainActivity
替换为活动名称,并将x
替换为要滚动的位置。
答案 1 :(得分:0)
如果您使用的是MVVM体系结构,则可以实现如下所示的内容:
答案 2 :(得分:0)
参加聚会有点晚,但是我是这样做的(也是RecyclerView.Adapter
)
class MyAdapter(...){
private lateinit var mRecyclerView: RecyclerView
override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
super.onAttachedToRecyclerView(recyclerView)
mRecyclerView = recyclerView
}
fun scrollToPosition(position: Int){
mRecyclerView.scrollToPosition(position)
}
}