猿问

在 RecyclerView.Adapter 内滚动到位置

在 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 中有类似的东西吗?


犯罪嫌疑人X
浏览 135回答 3
3回答

慕神8447489

在您的活动类中创建此方法,其中RecyclerView:fun scrollToPosition(position: Int) {    rv.scrollToPosition(position)}替换rv为RecyclerView的 id并在侦听器中添加以下内容:val myActivity: MainActivity = context as MainActivitymyActivity.scrollToPosition(x)替换MainActivity为活动的名称和x要滚动到的位置。

www说

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

繁华开满天机

如果您使用的是 MVVM 架构,您可能可以实现如下所示的内容:在 ViewModel 中有一个字段来存储滚动到的位置作为 LiveData。在包含 RecyclerView 的 Activity/Fragment 中,观察该字段并在其更改时滚动到其位置。
随时随地看视频慕课网APP

相关分类

Java
我要回答