我如何更改代码以使 mListener 可以为空?

How can i change the code so mListener can be nullable?

所以,我的问题是我需要用我当前的代码初始化 mListener,我怎样才能让它可以为空?

class TaskRecycleAdapter: RecyclerView.Adapter<TaskRecycleAdapter.MyViewHolder>() {

    private var list = emptyList<Data>()

    private lateinit var mListener : OnItemClickListener


     class MyViewHolder(binding: TaskHolderBinding, listener: OnItemClickListener): RecyclerView.ViewHolder(binding.root) {

        init {

            itemView.setOnClickListener {

                listener.onItemClick(adapterPosition)

            }

        }
    }



    interface OnItemClickListener {

        fun onItemClick(position: Int)

    }

    fun setOnItemClickListener(listener: OnItemClickListener) {

        mListener = listener

    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        return MyViewHolder(TaskHolderBinding.inflate(LayoutInflater.from(parent.context), parent, false), mListener)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {

        val item = list[position]

        holder.itemView.findViewById<CheckBox>(R.id.checkBox)
        holder.itemView.findViewById<TextView>(R.id.task).text = item.task
        holder.itemView.findViewById<TextView>(R.id.taskDescription).text = item.task_Details
    }

    override fun getItemCount(): Int {
        return list.size
    }

    fun setData(newList: List<Data>) {
        val diffUtil = DiffUtil(list, newList )
        val diffResults = calculateDiff(diffUtil)
        list = newList
        diffResults.dispatchUpdatesTo(this)
    }
    fun getTaskAt(position: Int): Data {
        return list[position]
    }
}

您需要使用 OnItemClickListener?

而不是 lateinit
private var mListener: OnItemClickListener? = null

然后进行更改以接收可为 null 的侦听器:

fun setOnItemClickListener(listener: OnItemClickListener?) {
        mListener = listener
    }


 class MyViewHolder(binding: TaskHolderBinding, listener: OnItemClickListener?) :
        RecyclerView.ViewHolder(binding.root) {

        init {

            itemView.setOnClickListener {

                // use safe call for nullables
                listener?.onItemClick(adapterPosition)

            }

        }
    }