XAdapter 是一个对 Android RecyclerView Adapter 的轻量级封装库,基于kotlin特性,可以做到
。
/**
* 更新数据
*/
fun <L : Collection<D>> refresh(list: L)
/**
* 按当前 [source] 重新扁平化并写入 Adapter 数据列表,随后 [notifyDataSetChanged]。
* 若已先调用 [refresh](带集合参数)更新 [source],可单独调用本方法触发表格刷新。
*/
fun refresh()
/**
* 在根节点中添加一个节点
* @param node
* @param index 指定位置(相对数据源),null 在末尾添加
*/
fun addNode(node: D, index: Int? = null)
/**
* 在根节点中添加多个节点
* @param nodes
* @param index 指定添加位置,不传则在末尾添加
*/
fun <L : Collection<D>> addNode(nodes: L, index: Int? = null)
/**
* 在parent节点中添加一个子节点node
* @param parent
* @param node
* @param index node在parent中的位置
*
*/
fun addChildNode(parent: D, node: D, index: Int? = null)
/**
* 在parent节点中添加多个子节点
* @param parent
* @param nodes
* @param index nodes在parent中的位置
*/
fun <L : Collection<D>> addChildNode(parent: D, nodes: L, index: Int? = null)
/**
* 根节点中删除一个节点
* @param node 被删除的节点
*/
fun removeNode(node: D)
/**
* 根节点中删除指定位置的节点
* @param index 被删除的节点
*/
fun removeNodeAt(index: Int)
/**
* 从start位置开始,删除count个节点
* @param start 开始位置
* @param count 删除数量
*/
fun removeNode(start: Int, count: Int)
/**
* 删除多个节点
* @param nodes 被删除的节点
*/
fun removeNodeList(nodes: List<D>)
/**
* 删除子节点
*/
fun removeChildNode(parent: D, node: D)
/**
* 删除子节点
*/
fun removeChildNodeAt(parent: D, index: Int)
/**
* 删除子节点
*/
fun removeChildNode(parent: D, start: Int, count: Int)
/**
* 删除子节点
*/
fun removeChildNodeList(parent: D, nodes: List<D>)
/**
* 删除指定位置的节点,该位置是对应adapter中的位置,一般用于删除当前item
* @param adapterPosition 该节点在adapter中的位置
*/
fun removeNodePosition(adapterPosition: Int)
/**
* 更新数据
* 如果只是node属性变更,可以调用该方法同步刷新UI
*/
fun updateNode(node: D, payload: Any? = null)
/**
* 更新数据
* 可以是任意节点数据
* 该方法只更新当前数据,不会同步刷新子节点数据,如果需要更新子节点列表,请使用replaceNode()方法。
* @param oldNode 旧数据
* @param newNode 新数据
*/
fun updateNode(oldNode: D, newNode: D, payload: Any? = null)
/**
* 更新子节点数据
*
* 该方法只更新当前数据,不会同步刷新子节点数据,如果需要更新子节点列表,请使用replaceNode()方法。
* @param oldNode 旧数据
* @param newNode 新数据
*/
fun updateChildNode(parent: D, oldNode: D, newNode: D, payload: Any? = null)
/**
* 交换数据
* 该方法会对所有子节点更新
*
*/
fun replaceNode(oldNode: D, newNode: D)
/**
* 查找当前元素在Adapter数据集合中理论上所在的位置。
* 此方法是通过对源数据扁平化计算得出来的,即使未添加到adapter.datas中也能计算;但该方法对性能有一定损耗。
* 如果确定该node已经存在adapter中,可以使用getData().indexOf()方法获取所在位置。
* @param node 需要查找的元素
* @return 在Adapter中对应的position,-1表示不在列表中
*/
fun findAdapterPosition(node: D): Int