zhujie
2025-04-03 fe04012057d024770e0180543483d393281a542f
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package com.example.firstapp.adapter
 
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.example.firstapp.databinding.ItemIncomeGroupBinding
import com.example.firstapp.databinding.ItemIncomePackageHomeBinding
import com.example.firstapp.model.IncomeGroup
import com.example.firstapp.model.IncomePackage
 
class IncomeAdapter : ListAdapter<IncomeGroup, IncomeAdapter.ViewHolder>(IncomeGroupDiffCallback()) {
 
    private var onPackageClickListener: (IncomeGroup, IncomePackage) -> Unit = { _, _ -> }
 
    fun setOnPackageClickListener(listener: (IncomeGroup, IncomePackage) -> Unit) {
        onPackageClickListener = listener
    }
 
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val binding = ItemIncomeGroupBinding.inflate(
            LayoutInflater.from(parent.context), parent, false
        )
        return ViewHolder(binding)
    }
 
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val group = getItem(position)
        holder.bind(group)
    }
 
    inner class ViewHolder(private val binding: ItemIncomeGroupBinding) :
        RecyclerView.ViewHolder(binding.root) {
        private val packagesAdapter = IncomePackageHomeAdapter { pack ->
            currentGroup?.let { group ->
                onPackageClickListener(group, pack)
            }
        }
        private var currentGroup: IncomeGroup? = null
 
        init {
            binding.rvPackages.apply {
                layoutManager = LinearLayoutManager(context)
                adapter = packagesAdapter
            }
        }
 
        fun bind(group: IncomeGroup) {
            currentGroup = group
            binding.tvStationName.text = group.stationName
            binding.tvPackageCount.text = "共${group.packages.size}笔收入"
            packagesAdapter.submitList(group.packages)
        }
    }
}
 
class IncomePackageHomeAdapter(private val onPackageClick: (IncomePackage) -> Unit) :
    ListAdapter<IncomePackage, IncomePackageHomeAdapter.ViewHolder>(IncomePackageDiffCallback()) {
 
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val binding = ItemIncomePackageHomeBinding.inflate(
            LayoutInflater.from(parent.context), parent, false
        )
        return ViewHolder(binding)
    }
 
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val pack = getItem(position)
        holder.bind(pack)
    }
 
    inner class ViewHolder(private val binding: ItemIncomePackageHomeBinding) :
        RecyclerView.ViewHolder(binding.root) {
 
        init {
            binding.root.setOnClickListener {
                val pack = getItem(adapterPosition)
                onPackageClick(pack)
            }
        }
 
        fun bind(pack: IncomePackage) {
            binding.tvCompany.text = pack.company
            binding.tvCreateTime.text = pack.createTime
            binding.tvTrackingNumber.text = "¥${pack.trackingNumber}"
//            binding.tvBalance.text = "余额: ¥${pack.balance}"
        }
    }
}
 
private class IncomeGroupDiffCallback : DiffUtil.ItemCallback<IncomeGroup>() {
    override fun areItemsTheSame(oldItem: IncomeGroup, newItem: IncomeGroup): Boolean {
        return oldItem.stationName == newItem.stationName
    }
 
    override fun areContentsTheSame(oldItem: IncomeGroup, newItem: IncomeGroup): Boolean {
        return oldItem == newItem
    }
}
 
private class IncomePackageDiffCallback : DiffUtil.ItemCallback<IncomePackage>() {
    override fun areItemsTheSame(oldItem: IncomePackage, newItem: IncomePackage): Boolean {
        return oldItem.id == newItem.id
    }
 
    override fun areContentsTheSame(oldItem: IncomePackage, newItem: IncomePackage): Boolean {
        return oldItem == newItem
    }