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
文章標籤
全站熱搜
留言列表