我如何更改代码以使 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)
}
}
}
所以,我的问题是我需要用我当前的代码初始化 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)
}
}
}