簡體   English   中英

如何在MVVM結構中的RecyclerView項上設置OnClickListener

[英]How to set OnClickListener on RecyclerView item in MVVM structure

我有一個在MVVM構建的應用程序。 我在同一活動中有不同的片段。 每個fragment都有自己的ViewModel並且所有數據都是從REST API檢索的。

在FragmentA中,有一個RecyclerView列出了X個類實例。 我想在RecyclerView上設置OnClickListener ,並且要在RecyclerView單擊某個項目時將相關的X對象傳遞給FragmentB 我該如何實現?

如果您使用數據綁定,則需要通過適配器類將視圖(在您的情況下為Fragment)傳遞到布局中,並且需要將視圖導入布局文件中才能調用視圖的方法

android:onClick="@{() -> view.onXXXClick(item)}"

將當前作為item模型類傳遞到此新方法中,然后在視圖中創建onXXXClick方法並執行所需的任何操作。

如果要執行與視圖相關的操作,例如從一個片段導航到另一個片段啟動服務 ,則應在視圖中創建上述功能;如果要進行與網絡或數據庫相關的操作,則應在ViewModel

您可以查看我的GitHub存儲庫以更好地了解。

我的想象如下。

片段將偵聽器對象傳遞給適配器,適配器又將其傳遞給ViewHolders

這是一個簡短的草圖

class Fragment {
    val listener = object: CustomAdapter.CustomViewHolderListener() {
        override fun onCustomItemClicked(x: Object) {}

    }

    fun onViewCreated() {
        val adapter = CustomAdapter(listener)
    }
}
---------------
class CustomAdapter(private val listener: CustomViewHolderListener) {
    val listOfXObject = emptyList() // this is where you save your x objects

    interface CustomViewHolderListener{
        fun onCustomItemClicked(x : Object)
    }

    override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {
        holder.itemView.setOnClickListener {
            listener.onCustomItemClicked(listOfXObject[position])
        }
    }
}

這里有一些文章可能會幫助您了解這些事情的基本內容。 他們雖然沒有直接回答您的問題

希望對您有所幫助鏈接1 鏈接2

暫無
暫無

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

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