簡體   English   中英

在 RecyclerView.Adapter 內滾動到位置

[英]Inside RecyclerView.Adapter scroll to position

在 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 中有類似的東西嗎?

RecyclerView所在的活動類中創建此方法:

fun scrollToPosition(position: Int) {
    rv.scrollToPosition(position)
}

RecyclerView的 id 替換rv

並在偵聽器中添加以下內容:

val myActivity: MainActivity = context as MainActivity
myActivity.scrollToPosition(x)

MainActivity替換為活動的名稱,將x替換為要滾動到的位置。

聚會有點晚了,但我是這樣做的(也是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 架構,您可以實現如下所示的內容:

  1. 在 ViewModel 中有一個字段來存儲滾動到的位置作為 LiveData。
  2. 在包含 RecyclerView 的 Activity/Fragment 中,觀察該字段並在其更改時滾動到其位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM