cloudroam
2025-02-26 b653b90d4598ee2a65bceffa793bb75353b6d186
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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
    }