我是Kotlin和DataBinding的新手,基于Google I/O Android App on Github,我编写了一个可以工作的适配器,但是我无法完全理解为什么有人会比传统方法更喜欢DataBinding?在这种情况下有优势吗?:
internal class RecyclerAdapterKt : RecyclerView.Adapter<BaseViewHolder>() {
private val data = ArrayList<Item>()
...
/* with data binding */
override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): BaseViewHolder {
val inflater = LayoutInflater.from(parent.context)
return BaseViewHolder.BasicItemViewHolder(ItemViewBinding.inflate(inflater,parent,false))
}
override fun onBindViewHolder(holder: BaseViewHolder,position: Int) {
val item = data[position]
(holder as BaseViewHolder.BasicItemViewHolder).bind(item)
}
// without data binding
// override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): BaseViewHolder {
// val view = from(parent.context).inflate(R.layout.item_view,false)
// return BaseViewHolder(view)
// }
//
// override fun onBindViewHolder(holder: BaseViewHolder,position: Int) {
// val item = data[position]
// holder.tv_title.text = item.title
// holder.tv_message.text = item.message
// }
...
sealed class BaseViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
class BasicItemViewHolder(
val binding: ItemViewBinding
) : BaseViewHolder(binding.root) {
fun bind(item : Item) {
binding.tvTitle.text = item.title
// Difference with using itemView.tv_title.text?
binding.tvmessage.text = item.message
}
}
}
为什么不通过itemView在fun bind()中直接访问布局视图?