XAdapter 是一个对 Android RecyclerView Adapter 的轻量级封装库,基于kotlin特性,可以做到
。
单布局Node创建
- 数据类必须实现NodeEntity接口,并重写getChildNodeEntityList()方法
data class NodeInfo(val name: String, val child: MutableList<NodeInfo>? = null) : NodeEntity<NodeInfo?, NodeInfo>{
override var xParentNodeEntity: NodeInfo? = null
override var xNodeGrade: Int? = null
override fun getChildNodeEntityList(): MutableList<NodeInfo>? {
return child
}
}
- 调用nodeAdapter方法创建Adapter
val adapter = nodeAdapter<ItemNodeBinding, NodeInfo> {
}
多布局Node创建
- 数据类必须实现NodeEntity接口,并重写getChildNodeEntityList()方法
data class AreaNode(val name: String) : NodeEntity<CityNode, Unit> {
override var xParentNodeEntity: CityNode? = null
override var xNodeGrade: Int? = null
override fun getChildNodeEntityList(): MutableList<Unit>? {
return null
}
}
data class ProvinceNode(val name: String, val city: MutableList<CityNode>) : NodeEntity<Unit, CityNode> {
override var xParentNodeEntity: Unit? = null
override var xNodeGrade: Int? = null
override fun getChildNodeEntityList(): MutableList<CityNode> {
return city
}
}
data class CityNode(val name: String, val area: ArrayList<AreaNode>) : NodeEntity<ProvinceNode, AreaNode> {
override var xParentNodeEntity: ProvinceNode? = null
override var xNodeGrade: Int? = null
override fun getChildNodeEntityList(): MutableList<AreaNode> {
return area
}
}
- 调用nodeAdapter和withType方法创建Adapter
val adapter = nodeAdapter()
.withType<ItemNodeBinding, ProvinceNode> {
}.withType<ItemNodeBinding, CityNode> {
}.withType<ItemNodeBinding, AreaNode> {
}.toAdapter()