![](/img/trans.png)
[英]getRef(position).getKey() in 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 架構,您可以實現如下所示的內容:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.