lmw
2023-06-16 03972ad1d3ce6ffe0be0395c0a4d5dcb4474031f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package cn.sinata.xldutils.adapter
 
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.LayoutRes
import androidx.recyclerview.widget.RecyclerView
import cn.sinata.xldutils.adapter.util.ViewHolder
import kotlin.properties.Delegates
 
/**
 *基础recyclerView的Adapter
 */
abstract class BaseRecyclerAdapter<T>(var mData: ArrayList<T>,@LayoutRes layoutId: Int) : RecyclerView.Adapter<ViewHolder>() {
    private var mLayoutId: Int = layoutId
    var context: Context by Delegates.notNull()
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        context = parent!!.context
        if (mLayoutId <= 0) {
            mLayoutId = android.R.layout.simple_list_item_1
        }
        val view = LayoutInflater.from(parent.context).inflate(mLayoutId, parent, false)
        return ViewHolder(view)
    }
 
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        if (!disableItemClick()) {
            initItemClickListener(holder, position)
        }
        val t = mData[position%mData.size]
        onBind(holder!!, position%mData.size, t)
    }
 
    override fun getItemCount(): Int = this.mData.size
    abstract fun onBind(holder: ViewHolder, position: Int, data: T)
 
    protected var mOnItemClickListener: OnItemClickListener? = null
 
    /**
     * 设置OnItemClickListener
     * @param mOnItemClickListener OnItemClickListener
     */
    fun setOnItemClickListener(mOnItemClickListener: OnItemClickListener) {
        this.mOnItemClickListener = mOnItemClickListener
    }
    /**
     * 设置OnItemClickListener
     * @param mOnItemClickListener OnItemClickListener
     */
    fun setOnItemClickListener(listener: (view:View?,position:Int) -> Unit) {
        this.mOnItemClickListener = object :OnItemClickListener{
            override fun onItemClick(view: View?, position: Int) {
                listener(view,position%mData.size)
            }
        }
    }
 
    interface OnItemClickListener {
        fun onItemClick(view: View?, position: Int)
    }
 
    private fun initItemClickListener(holder: ViewHolder?, position: Int) {
        //如果设置了回调,则设置点击事件
        holder?.itemView?.setOnClickListener {
            if (mOnItemClickListener != null) {
                mOnItemClickListener?.onItemClick(holder.itemView, position%mData.size)
            }
        }
    }
 
    open fun disableItemClick() = false
}