早在去年的时候我就提到过使用工厂的方式获取 Adapter 而不是为每个 Adapter 定义一个类文件。这样的好处是,对于不是那么复杂的 Adapter 可以节省大量的代码,提升开发效率和解放双手,同时更好的支持多类型布局效果。
1、Kotlin DSL 和 Adapter 工厂方法
可以把 Kotlin DSL 当作构建者使用。这里有一篇不错的文章,想了解的可以阅读下,
https://www.ximedes.com/2020-04-21/kotlin-dsl-tutorial/
Kotlin DSL 是拓展函数的延申,比如我们常用的 with 等函数就是函数的拓展,
public inline fun <T, R> with(receiver: T, block: T.() -> R): R {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return receiver.block()
}
这里是泛型 T 的拓展。这里的 T 可以类比到 Java 构建者模式中的 Builder,通过方法接收外部参数之后调用 build()
方法创建一个最终的对象即可。
对于 Adapter 工厂方法,之前我是通过如下方式使用的,
fun <T> getAdapter(
@LayoutRes itemLayout:Int,
converter: (helper: BaseViewHolder, item: T) -> Unit,
data: List<T>
): Adapter<T> = Adapter(itemLayout, converter, data)
class Adapter<T>(
@LayoutRes private val layout: Int,
private val converter: (helper: BaseViewHolder, item: T) -> Unit,
val list: List<T>
): BaseQuickAdapter<T, BaseViewHolder