close

上篇提到 Kotlin Android Extensions 遷移至 Jetpack view binding 的方式,點我進入

 

這篇要說,如何在 RecyclerView Adapter 裡面也可以用 view binding 

剛開始使用 view binding 的朋友們

是不是以為只要在 id 前面加個 binding 就可以解決全部了呢

No, No, No

當遇到 RecyclerView 的時候有想過要怎麼做嗎

把 binding 塞進 Adapter ?

還是在 Adapter 中再來一個 binding ?

 

我的方法如下:

inner class NoLikeYouDataVH(val binding: ItemLikeYouEmptyBinding) :
    RecyclerView.ViewHolder(binding.root)

inner class LikeYouListVH(val binding: ItemLikeYouListBinding) :
    RecyclerView.ViewHolder(binding.root)

依照自己的 viewType 去訂義不同的 ViewHolder

然後讓 ViewHolder 接收 binding

 

之後在 onCreateViewHolder 就和我們平常操作的一樣

利用 viewType 去建立 ViewHolder

但我們怎麼產出 binding 給 ViewHolder 呢?

請用 Binding 的 inflate 就可以了

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    return when (viewType) {
        typeEmpty -> {
            NoLikeYouDataVH(
                ItemLikeYouEmptyBinding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            )
        }
        else -> {
            LikeYouListVH(
                ItemLikeYouListBinding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            )
        }
    }
}

最後在 onBindViewHolder 時

就可以直接取用 ViewHolder 裡面的 binding 來做 view 的處理囉

像這樣

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {

    if (holder is NoLikeYouDataVH) {
        holder.binding.itemLikeYouEmptyBtn.setPreventMultiClickListener { clickEvent(it, null) }
    }
}

 

 

End

 

 


arrow
arrow

    顏澤偉 發表在 痞客邦 留言(1) 人氣()