使用反射
abstract class ViewBindingDelegate<T, VB : ViewBinding> :
ItemViewDelegate<T, ViewBindingViewHolder>() {
override fun onCreateViewHolder(
context: Context,
parent: ViewGroup
): ViewBindingViewHolder {
return ViewBindingViewHolder(inflateBindingWithGeneric(parent))
}
}
ViewHolder 的创建需要传入 layout 对应的binding,这里使用反射生成。
相关反射代码如下:
@JvmName(“inflateWithGeneric”)
fun Any.inflateBindingWithGeneric(layoutInflater: LayoutInflater): VB =
withGenericBindingClass(this) { clazz ->
clazz.getMethod(“inflate”, LayoutInflater::class.java).invoke(null, layoutInflater) as VB
}
@JvmName(“inflateWithGeneric”)
fun Any.inflateBindingWithGeneric(layoutInflater: LayoutInflater, parent: ViewGroup?, attachToParent: Boolean): VB =
withGenericBindingClass(this) { clazz ->
clazz.getMethod(“inflate”, L