package cn.flightfeather.thirdapp.view.recyclerview
|
|
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
|
import com.chad.library.adapter.base.entity.AbstractExpandableItem
|
import com.chad.library.adapter.base.entity.MultiItemEntity
|
|
/**
|
* @author riku
|
* Date: 2019/4/18
|
* recyclerView的基类adapter
|
*/
|
abstract class BaseRecyclerAdapter<T> constructor(
|
layoutIdMap: Map<Int, Int>,
|
sectionLayoutId: Int?,
|
mData: List<MySection<T>>
|
) : BaseMultiItemQuickAdapter<MySection<T>, BaseCustomViewHolder>(mData) {
|
|
companion object {
|
const val SECTION_HEADER_VIEW = 0x00000444
|
}
|
init {
|
sectionLayoutId?.let { addItemType(SECTION_HEADER_VIEW, it) }
|
layoutIdMap.forEach {
|
addItemType(it.key, it.value)
|
}
|
}
|
|
override fun onBindViewHolder(holder: BaseCustomViewHolder, position: Int) {
|
when (holder.itemViewType) {
|
SECTION_HEADER_VIEW -> {
|
setFullSpan(holder)
|
convertHead(holder, getItem(position - headerLayoutCount))
|
}
|
else -> super.onBindViewHolder(holder, position)
|
}
|
}
|
|
override fun onBindViewHolder(
|
holder: BaseCustomViewHolder,
|
position: Int,
|
payloads: MutableList<Any>
|
) {
|
if (payloads.isEmpty()) {
|
super.onBindViewHolder(holder, position, payloads)
|
} else {
|
convertPartView(holder, getItem(position - headerLayoutCount), payloads)
|
}
|
}
|
|
protected abstract fun convertHead(holder: BaseCustomViewHolder, item: MySection<T>?)
|
|
//局部刷新
|
protected abstract fun convertPartView(holder: BaseCustomViewHolder, item: MySection<T>?, payloads: MutableList<Any>)
|
|
// override fun convertHead(helper: BaseCustomViewHolder?, item: MySection<T>?) {
|
// convertListener?.onConvertHead(helper, item)
|
// }
|
//
|
// override fun convert(helper: BaseCustomViewHolder, item: MySection<T>?) {
|
// convertListener?.onConvert(helper, item)
|
// }
|
}
|
|
class MySection<T> : AbstractExpandableItem<MySection<T>>, MultiItemEntity {
|
|
var mItemType: Int = DEFAULT_ITEM_TYPE
|
var isHeader: Boolean = false
|
var t: T
|
var header: String? = null
|
var myLevel = 1
|
|
constructor (isHeader: Boolean, header: String?, t: T) {
|
this.isHeader = isHeader
|
this.header = header
|
this.myLevel = 1
|
this.mItemType = BaseRecyclerAdapter.SECTION_HEADER_VIEW
|
this.t = t
|
}
|
|
constructor(t: T, mItemType: Int = DEFAULT_ITEM_TYPE, level: Int = 1) {
|
this.mItemType = mItemType
|
this.t = t
|
this.myLevel = level
|
}
|
|
companion object {
|
const val DEFAULT_ITEM_TYPE = -1
|
/**
|
* 将普通的list转化为SectionEntity列表
|
*/
|
fun <T> convert2Section(list: List<T>?): ArrayList<MySection<T>> {
|
val resultList = ArrayList<MySection<T>>()
|
list?.forEach {
|
resultList.add(MySection(it))
|
}
|
return resultList
|
}
|
|
/**
|
* 将SectionEntity列表转化为普通的list
|
*/
|
fun <T> convert2List(list: List<MySection<T>>?): List<T> {
|
val resultList = mutableListOf<T>()
|
list?.forEach {
|
resultList.add(it.t)
|
}
|
return resultList
|
}
|
}
|
|
override fun getItemType(): Int = mItemType
|
|
override fun getLevel(): Int = myLevel
|
|
}
|