package com.example.firstapp.adapter
|
|
import android.view.LayoutInflater
|
import android.view.ViewGroup
|
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.ListAdapter
|
import com.example.firstapp.databinding.ItemExpressGroupBinding
|
import com.example.firstapp.databinding.ItemExpressPackageBinding
|
import androidx.recyclerview.widget.DiffUtil
|
import com.example.firstapp.model.ExpressGroup
|
import com.example.firstapp.model.ExpressPackage
|
|
class ExpressAdapter : ListAdapter<ExpressGroup, ExpressAdapter.ViewHolder>(ExpressGroupDiffCallback()) {
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
val binding = ItemExpressGroupBinding.inflate(
|
LayoutInflater.from(parent.context), parent, false
|
)
|
return ViewHolder(binding)
|
}
|
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
val group = getItem(position)
|
holder.bind(group)
|
}
|
|
class ViewHolder(private val binding: ItemExpressGroupBinding) : RecyclerView.ViewHolder(binding.root) {
|
private val packagesAdapter = ExpressPackageAdapter()
|
|
init {
|
binding.rvPackages.apply {
|
layoutManager = LinearLayoutManager(context)
|
adapter = packagesAdapter
|
}
|
}
|
|
fun bind(group: ExpressGroup) {
|
binding.tvStationName.text = group.stationName
|
binding.tvPackageCount.text = "共${group.packages.size}个包裹"
|
packagesAdapter.submitList(group.packages)
|
}
|
}
|
}
|
|
class ExpressPackageAdapter : ListAdapter<ExpressPackage, ExpressPackageAdapter.ViewHolder>(ExpressPackageDiffCallback()) {
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
val binding = ItemExpressPackageBinding.inflate(
|
LayoutInflater.from(parent.context), parent, false
|
)
|
return ViewHolder(binding)
|
}
|
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
val pack = getItem(position)
|
holder.bind(pack)
|
}
|
|
class ViewHolder(private val binding: ItemExpressPackageBinding) : RecyclerView.ViewHolder(binding.root) {
|
fun bind(pack: ExpressPackage) {
|
binding.tvCompany.text = pack.company
|
binding.tvTrackingNumber.text = pack.trackingNumber
|
binding.tvDate.text = pack.date
|
}
|
}
|
}
|
|
private class ExpressGroupDiffCallback : DiffUtil.ItemCallback<ExpressGroup>() {
|
override fun areItemsTheSame(oldItem: ExpressGroup, newItem: ExpressGroup): Boolean {
|
return oldItem.stationName == newItem.stationName
|
}
|
|
override fun areContentsTheSame(oldItem: ExpressGroup, newItem: ExpressGroup): Boolean {
|
return oldItem == newItem
|
}
|
}
|
|
private class ExpressPackageDiffCallback : DiffUtil.ItemCallback<ExpressPackage>() {
|
override fun areItemsTheSame(oldItem: ExpressPackage, newItem: ExpressPackage): Boolean {
|
return oldItem.trackingNumber == newItem.trackingNumber
|
}
|
|
override fun areContentsTheSame(oldItem: ExpressPackage, newItem: ExpressPackage): Boolean {
|
return oldItem == newItem
|
}
|
}
|