BRVAH和ViewBinding的结合封装

101 阅读1分钟

BRVAH和ViewBinding的结合封装

封装基类:

abstract class ArchAdapter<B : ViewBinding,T>(data : MutableList<T>) : BaseQuickAdapter<T, ArchAdapter<B, T>.ViewHolder>(0,data){

    inner class ViewHolder(val binding: B,view : View) : BaseViewHolder(view)

    override fun onCreateDefViewHolder(parent: ViewGroup, viewType: Int) : ViewHolder {
        val viewBindingClass = ((javaClass.genericSuperclass as ParameterizedType)).actualTypeArguments[0] as Class<*>
        val binding = viewBindingClass.getMethod("inflate", LayoutInflater::class.java,ViewGroup::class.java,
            Boolean::class.java
        ).invoke(viewBindingClass,LayoutInflater.from(context),parent,false) as B
        return ViewHolder(binding,binding.root)
    }

    override fun convert(holder: ViewHolder, item: T) {
        convert(holder.binding,item)
    }

    abstract fun convert(binding : B,item : T)

}

使用示例:

class HomeAdapter(data : MutableList<HomeBean>) : ArchAdapter<ViewHomeBinding,HomeBean>(data) {
    
    override fun convert(binding: ViewManHomeBinding, item: HomeBean) {
        binding.user = item
    }
}