簡體   English   中英

如何在適配器 class 中獲取 `layoutInflator`?

[英]How to get `layoutInflator` in adapter class?

我有一個用例...

我想讓layoutInflator為嵌套的 recyclerView 綁定不同的視圖。 有什么最好的方法來獲取layoutInflator嗎?

我試圖從onBindViewHolder獲取它

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder. //something?
}

您不應該在onBindViewHolder中膨脹任何東西 - onCreateViewHolder是您設置顯示列表項的ViewHolder object 的地方,包括膨脹其布局視圖。 onBindViewHolder是您與這些視圖交互的地方,以顯示當前項目的適當數據。

那些創建的ViewHolder會被重用,因此無需為每個項目擴充視圖,您只需創建少量ViewHolder ,它們會在您滾動列表時交換。 VHs 池的回收就是它被稱為RecyclerView的原因。

通常,您會在每個ViewHolder中存儲對膨脹視圖的引用,如本例所示

/**
 * Provide a reference to the type of views that you are using
 * (custom ViewHolder)
 */
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    val textView: TextView

    init {
        // Define click listener for the ViewHolder's View
        textView = view.findViewById(R.id.textView)
    }
}

這樣,傳遞給ViewHolderonBindViewHolder就有一個您可以訪問的textView字段,例如,設置其文本內容以顯示當前項目的數據。 (如果您使用的是視圖綁定,則可以改為存儲對綁定 object 的引用,並通過holder.binding.textView等訪問視圖)

我不知道你在用嵌套的RecyclerView做什么,但原理是一樣的——主 RV 中的每個ViewHolder都將包含另一個 RV,它有自己的適配器和數據集,在onCreateViewHolder中創建和初始化。 如果要更改其內容(因為要在主 RV 列表中顯示特定項目),您可能需要在嵌套 RV 的適配器上添加一個setData function 以更改其數據集並刷新顯示。 讓適配器在需要時處理膨脹的東西,在onCreateViewHolder

暫無
暫無

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

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