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.R
|
import com.example.firstapp.databinding.ItemFlightGroupBinding
|
import com.example.firstapp.databinding.ItemFlightPackageHomeBinding
|
import com.example.firstapp.databinding.ItemFlightBinding
|
import com.example.firstapp.model.FlightGroup
|
import com.example.firstapp.model.FlightPackage
|
|
class FlightAdapter :
|
ListAdapter<FlightGroup, FlightAdapter.ViewHolder>(FlightGroupDiffCallback()) {
|
|
private var onPackageClickListener: (FlightGroup, FlightPackage) -> Unit = { _, _ -> }
|
|
fun setOnPackageClickListener(listener: (FlightGroup, FlightPackage) -> Unit) {
|
onPackageClickListener = listener
|
}
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
val binding = ItemFlightGroupBinding.inflate(
|
LayoutInflater.from(parent.context), parent, false
|
)
|
return ViewHolder(binding)
|
}
|
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
val group = getItem(position)
|
holder.bind(group)
|
holder.setOnPackageClickListener(onPackageClickListener)
|
}
|
|
|
inner class ViewHolder(private val binding: ItemFlightGroupBinding) :
|
RecyclerView.ViewHolder(binding.root) {
|
private val packagesAdapter = FlightPackageHomeAdapter { pack ->
|
currentGroup?.let { group ->
|
onPackageClickListener(group, pack)
|
}
|
}
|
private var currentGroup: FlightGroup? = null
|
|
init {
|
binding.rvPackages.apply {
|
layoutManager = LinearLayoutManager(context)
|
adapter = packagesAdapter
|
}
|
}
|
|
fun bind(group: FlightGroup) {
|
currentGroup = group
|
binding.tvStationName.text = group.stationName
|
binding.tvPackageCount.text = "共${group.packages.size}张机票"
|
packagesAdapter.submitList(group.packages)
|
}
|
|
fun setOnPackageClickListener(listener: (FlightGroup, FlightPackage) -> Unit) {
|
// 这个方法可以移除,因为我们在构造 FlightPackageHomeAdapter 时已经处理了点击事件
|
// 或者保留这个方法但不做任何操作
|
}
|
}
|
}
|
|
// 首页使用的机票适配器 - 简化版本
|
class FlightPackageHomeAdapter(private val onPackageClick: (FlightPackage) -> Unit) :
|
ListAdapter<FlightPackage, FlightPackageHomeAdapter.ViewHolder>(FlightPackageDiffCallback()) {
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
val binding = ItemFlightPackageHomeBinding.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: ItemFlightPackageHomeBinding) :
|
RecyclerView.ViewHolder(binding.root) {
|
|
init {
|
binding.root.setOnClickListener {
|
val pack = getItem(adapterPosition)
|
onPackageClick(pack)
|
}
|
}
|
|
fun bind(pack: FlightPackage) {
|
binding.tvCompany.text = pack.company
|
binding.tvCreateTime.text = pack.createTime
|
binding.tvTrackingNumber.text = pack.trackingNumber
|
}
|
}
|
}
|
|
// 取件页面使用的机票适配器
|
class FlightPackageAdapter(private val onPackagePickup: (FlightPackage) -> Unit = { _ -> }) :
|
ListAdapter<FlightPackage, FlightPackageAdapter.ViewHolder>(FlightPackageDiffCallback()) {
|
|
private var onPackageClickListener: (FlightPackage) -> Unit = {}
|
private var stationName: String = ""
|
|
fun setStationInfo(station: String) {
|
stationName = station
|
}
|
|
fun setOnPackageClickListener(listener: (FlightPackage) -> Unit) {
|
onPackageClickListener = listener
|
}
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
val binding = ItemFlightBinding.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: ItemFlightBinding) :
|
RecyclerView.ViewHolder(binding.root) {
|
|
init {
|
binding.ivPackageStatus.setOnClickListener {
|
val pack = getItem(adapterPosition)
|
onPackagePickup(pack)
|
}
|
|
binding.root.setOnClickListener(null)
|
}
|
|
fun bind(pack: FlightPackage) {
|
binding.tvPackageId.text = pack.id.toString()
|
binding.tvCompany.text = pack.company
|
binding.tvCreateTime.text = pack.createTime
|
binding.tvTrackingNumber.text = pack.trackingNumber
|
binding.ivPackageStatus.setImageResource(
|
R.drawable.circle
|
)
|
}
|
}
|
}
|
|
|
private class FlightGroupDiffCallback : DiffUtil.ItemCallback<FlightGroup>() {
|
override fun areItemsTheSame(oldItem: FlightGroup, newItem: FlightGroup): Boolean {
|
return oldItem.stationName == newItem.stationName
|
}
|
|
override fun areContentsTheSame(oldItem: FlightGroup, newItem: FlightGroup): Boolean {
|
return oldItem == newItem
|
}
|
}
|
|
private class FlightPackageDiffCallback : DiffUtil.ItemCallback<FlightPackage>() {
|
override fun areItemsTheSame(oldItem: FlightPackage, newItem: FlightPackage): Boolean {
|
return oldItem.trackingNumber == newItem.trackingNumber
|
}
|
|
override fun areContentsTheSame(oldItem: FlightPackage, newItem: FlightPackage): Boolean {
|
return oldItem == newItem
|
}
|
}
|