2024/4/10

package com.example.to_do_application.fragments.list.adapter

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.example.to_do_application.data.models.ToDoData
import com.example.to_do_application.databinding.RowLayoutBinding


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

var dataList = emptyList<ToDoData>()

class MyViewHolder(private val binding: RowLayoutBinding): RecyclerView.ViewHolder(binding.root) {
fun bind(toDoData: ToDoData){
binding.toDoData = toDoData
binding.executePendingBindings()
}
companion object{
fun from(parent: ViewGroup): MyViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val binding = RowLayoutBinding.inflate(layoutInflater,parent,false)
return MyViewHolder(binding)
}
}
}


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int,): MyViewHolder {
return MyViewHolder.from(parent)
}

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

override fun onBindViewHolder(holder: MyViewHolder, position: Int){
val currentItem = dataList[position]
holder.bind(currentItem)
}

fun setData(toDoData: List<ToDoData>){
val toDoDiffUtil = ToDoDiffUtil(dataList,toDoData)
val toDoDiffResult =DiffUtil.calculateDiff(toDoDiffUtil)
this.dataList = toDoData
toDoDiffResult.dispatchUpdatesTo(this)
}

}

package com.example.to_do_application.fragments.list.adapter

import androidx.recyclerview.widget.DiffUtil
import com.example.to_do_application.data.models.ToDoData

class ToDoDiffUtil(
private val oldList: List<ToDoData>,
private val newList: List<ToDoData>
): DiffUtil.Callback() {
override fun getOldListSize(): Int {
return oldList.size
}

override fun getNewListSize(): Int {
return newList.size
}

override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
return oldList[oldItemPosition] === newList[newItemPosition]
}

override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
return oldList[oldItemPosition].id == newList[newItemPosition].id
&& oldList[oldItemPosition].tile == newList[newItemPosition].tile
&& oldList[oldItemPosition].description == newList[newItemPosition].description
&& oldList[oldItemPosition].priority == newList[newItemPosition].priority
}

}
posted @ 2024-04-10 19:16  Hbro  阅读(31)  评论(0)    收藏  举报