package cn.eeepay.lib_core.ktx
import android.graphics.Color
import android.view.View
import androidx.annotation.ColorInt
import androidx.annotation.IdRes
import androidx.annotation.LayoutRes
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import cn.eeepay.lib_core.R
import cn.eeepay.lib_core.recadapter.divider.RecyclerViewDivider
import cn.eeepay.lib_core.utils.ColorUtil
import com.blankj.utilcode.util.ConvertUtils
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
class CommonBaseAdapter<T> constructor(
@LayoutRes private val layoutResId: Int,
) : BaseQuickAdapter<T, BaseViewHolder>(layoutResId) {
private var bindDataFun: ((BaseViewHolder, T) -> Unit)? = null
fun bindData(block: ((BaseViewHolder, T) -> Unit)) {
bindDataFun = block
}
override fun convert(holder: BaseViewHolder, item: T) {
bindDataFun?.invoke(holder, item)
}
}
fun RecyclerView.divider(dpValue: Float = 0.5F, colorId: Int = R.color.lib_core_EEEEEE, dividerMarginLeft: Float = 0F, dividerMarginRight: Float = 0f): RecyclerView {
this.addItemDecoration(
RecyclerViewDivider(
context,
LinearLayoutManager.HORIZONTAL,
ConvertUtils.dp2px(dpValue),
ContextCompat.getColor(context, colorId), ConvertUtils.dp2px(dividerMarginLeft), ConvertUtils.dp2px(dividerMarginRight)
)
)
return this
}
fun RecyclerView.linear(
@RecyclerView.Orientation orientation: Int = RecyclerView.VERTICAL
): RecyclerView {
val manager = LinearLayoutManager(context)
manager.orientation = orientation
layoutManager = manager
return this
}
fun <T> RecyclerView.set(@LayoutRes layoutResId: Int, block: ((BaseViewHolder, T) -> Unit)): CommonBaseAdapter<T> {
val adapter = CommonBaseAdapter<T>(layoutResId)
adapter.bindData(block)
this.adapter = adapter
return adapter
}
fun <T> CommonBaseAdapter<T>.setData(newData: Collection<T>): CommonBaseAdapter<T> {
this.setList(newData)
return this
}
fun <T> CommonBaseAdapter<T>.setItemClick(block: (adapter: BaseQuickAdapter<*, *>, view: View, position: Int) -> Unit): CommonBaseAdapter<T> {
this.setOnItemClickListener { adapterInfo, v, pos ->
block.invoke(adapterInfo, v, pos)
}
return this
}
fun <T> CommonBaseAdapter<T>.setItemChildClickView(@IdRes vararg viewIds: Int, block: (adapter: BaseQuickAdapter<*, *>, view: View, position: Int) -> Unit): CommonBaseAdapter<T> {
this.getChildClickViewIds().addAll(viewIds.toList())
this.setOnItemChildClickListener { adapterInfo, v, pos ->
block.invoke(adapterInfo, v, pos)
}
return this
}
fun <T> CommonBaseAdapter<T>.setItemLongClick(block: (adapter: BaseQuickAdapter<*, *>, view: View, position: Int) -> Boolean): CommonBaseAdapter<T> {
this.setOnItemLongClickListener { adapterInfo, v, pos ->
block.invoke(adapterInfo, v, pos)
}
return this
}
fun <T> CommonBaseAdapter<T>.setItemChildLongClickView(@IdRes vararg viewIds: Int, block: (adapter: BaseQuickAdapter<*, *>, view: View, position: Int) -> Boolean): CommonBaseAdapter<T> {
this.getChildLongClickViewIds().addAll(viewIds.toList())
this.setOnItemChildLongClickListener { adapterInfo, v, pos ->
block.invoke(adapterInfo, v, pos)
}
return this
}