From a69ed0d5eed84bea789463e718a2774122348685 Mon Sep 17 00:00:00 2001 From: cloudroam <cloudroam> Date: 星期四, 27 二月 2025 17:55:22 +0800 Subject: [PATCH] add: 取件列表信息 --- app/src/main/java/com/example/firstapp/adapter/ExpressAdapter.kt | 100 +++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 90 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/example/firstapp/adapter/ExpressAdapter.kt b/app/src/main/java/com/example/firstapp/adapter/ExpressAdapter.kt index 2445433..dafbba4 100644 --- a/app/src/main/java/com/example/firstapp/adapter/ExpressAdapter.kt +++ b/app/src/main/java/com/example/firstapp/adapter/ExpressAdapter.kt @@ -6,12 +6,20 @@ 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 +import com.example.firstapp.R +import com.example.firstapp.databinding.ItemPackageBinding +import com.example.firstapp.databinding.ItemExpressPackageHomeBinding class ExpressAdapter : ListAdapter<ExpressGroup, ExpressAdapter.ViewHolder>(ExpressGroupDiffCallback()) { + + private var onPackageClickListener: (ExpressGroup, ExpressPackage) -> Unit = { _, _ -> } + + fun setOnPackageClickListener(listener: (ExpressGroup, ExpressPackage) -> Unit) { + onPackageClickListener = listener + } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val binding = ItemExpressGroupBinding.inflate( @@ -23,10 +31,17 @@ override fun onBindViewHolder(holder: ViewHolder, position: Int) { val group = getItem(position) holder.bind(group) + holder.setOnPackageClickListener(onPackageClickListener) } - class ViewHolder(private val binding: ItemExpressGroupBinding) : RecyclerView.ViewHolder(binding.root) { - private val packagesAdapter = ExpressPackageAdapter() + inner class ViewHolder(private val binding: ItemExpressGroupBinding) : + RecyclerView.ViewHolder(binding.root) { + private val packagesAdapter = ExpressPackageHomeAdapter { pack -> + currentGroup?.let { group -> + onPackageClickListener(group, pack) + } + } + private var currentGroup: ExpressGroup? = null init { binding.rvPackages.apply { @@ -36,17 +51,25 @@ } fun bind(group: ExpressGroup) { + currentGroup = group binding.tvStationName.text = group.stationName binding.tvPackageCount.text = "共${group.packages.size}个包裹" packagesAdapter.submitList(group.packages) } + + fun setOnPackageClickListener(listener: (ExpressGroup, ExpressPackage) -> Unit) { + // 这个方法可以移除,因为我们在构造 ExpressPackageHomeAdapter 时已经处理了点击事件 + // 或者保留这个方法但不做任何操作 + } } } -class ExpressPackageAdapter : ListAdapter<ExpressPackage, ExpressPackageAdapter.ViewHolder>(ExpressPackageDiffCallback()) { - +// 首页使用的包裹适配器 - 简化版本 +class ExpressPackageHomeAdapter(private val onPackageClick: (ExpressPackage) -> Unit) : + ListAdapter<ExpressPackage, ExpressPackageHomeAdapter.ViewHolder>(ExpressPackageDiffCallback()) { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - val binding = ItemExpressPackageBinding.inflate( + val binding = ItemExpressPackageHomeBinding.inflate( LayoutInflater.from(parent.context), parent, false ) return ViewHolder(binding) @@ -57,11 +80,68 @@ holder.bind(pack) } - class ViewHolder(private val binding: ItemExpressPackageBinding) : RecyclerView.ViewHolder(binding.root) { + inner class ViewHolder(private val binding: ItemExpressPackageHomeBinding) : + RecyclerView.ViewHolder(binding.root) { + + init { + binding.root.setOnClickListener { + val pack = getItem(adapterPosition) + onPackageClick(pack) + } + } + fun bind(pack: ExpressPackage) { - binding.tvCompany.text = pack.company - binding.tvTrackingNumber.text = pack.trackingNumber - binding.tvDate.text = pack.date + binding.tvPackageInfo.text = "${pack.company} - ${pack.trackingNumber}" + } + } +} + +// 取件页面使用的包裹适配器 +class ExpressPackageAdapter(private val onPackagePickup: (ExpressPackage) -> Unit = { _ -> }) : + ListAdapter<ExpressPackage, ExpressPackageAdapter.ViewHolder>(ExpressPackageDiffCallback()) { + + private var onPackageClickListener: (ExpressPackage) -> Unit = {} + private var stationName: String = "" + + fun setStationInfo(station: String) { + stationName = station + } + + fun setOnPackageClickListener(listener: (ExpressPackage) -> Unit) { + onPackageClickListener = listener + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val binding = ItemPackageBinding.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: ItemPackageBinding) : + RecyclerView.ViewHolder(binding.root) { + + init { + binding.ivPackageStatus.setOnClickListener { + val pack = getItem(adapterPosition) + onPackagePickup(pack) + } + + binding.root.setOnClickListener(null) + } + + fun bind(pack: ExpressPackage) { + binding.tvPackageInfo.text = "${pack.company} - ${pack.trackingNumber}" + binding.ivPackageStatus.setImageResource( +// if (pack.isPickedUp) R.drawable.circle_checked +// else R.drawable.circle + R.drawable.circle + ) } } } -- Gitblit v1.9.3