| | |
| | | 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( |
| | |
| | | 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 { |
| | |
| | | } |
| | | |
| | | 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) |
| | |
| | | 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.tvCreateTime.text = pack.createTime |
| | | binding.tvTrackingNumber.text = pack.trackingNumber |
| | | binding.tvDate.text = pack.date |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 取件页面使用的包裹适配器 |
| | | 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.tvPackageId.text = pack.id.toString() |
| | | binding.tvCompany.text = pack.company |
| | | binding.tvCreateTime.text = pack.createTime |
| | | binding.tvTrackingNumber.text = pack.trackingNumber |
| | | binding.ivPackageStatus.setImageResource( |
| | | // if (pack.isPickedUp) R.drawable.circle_checked |
| | | // else R.drawable.circle |
| | | R.drawable.circle |
| | | ) |
| | | } |
| | | } |
| | | } |