为了账号安全,请及时绑定邮箱和手机立即绑定

在 RecyclerView.Adapter 内滚动到位置

在 RecyclerView.Adapter 内滚动到位置

犯罪嫌疑人X 2021-12-01 16:57:28
在 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 中有类似的东西吗?
查看完整描述

3 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

在您的活动类中创建此方法,其中RecyclerView:


fun scrollToPosition(position: Int) {

    rv.scrollToPosition(position)

}

替换rv为RecyclerView的 id


并在侦听器中添加以下内容:


val myActivity: MainActivity = context as MainActivity

myActivity.scrollToPosition(x)

替换MainActivity为活动的名称和x要滚动到的位置。


查看完整回答
反对 回复 2021-12-01
?
www说

TA贡献1775条经验 获得超8个赞

聚会有点晚了,但我是这样做的(也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)

    }

}


查看完整回答
反对 回复 2021-12-01
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

如果您使用的是 MVVM 架构,您可能可以实现如下所示的内容:

  1. 在 ViewModel 中有一个字段来存储滚动到的位置作为 LiveData。

  2. 在包含 RecyclerView 的 Activity/Fragment 中,观察该字段并在其更改时滚动到其位置。


查看完整回答
反对 回复 2021-12-01
  • 3 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信