package com.example.firstapp.adapter
|
|
import android.view.LayoutInflater
|
import android.view.ViewGroup
|
import androidx.recyclerview.widget.DiffUtil
|
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.RecyclerView
|
import com.example.firstapp.R
|
import com.example.firstapp.activity.PickupActivity
|
import com.example.firstapp.databinding.ItemPackageBinding
|
import com.example.firstapp.model.ExpressPackage
|
|
class PickupPackageAdapter(private val onPackagePickup: (ExpressPackage) -> Unit = { _ -> }) :
|
ListAdapter<ExpressPackage, PickupPackageAdapter.ViewHolder>(PickupPackageDiffCallback()) {
|
|
private var onPackageClickListener: (ExpressPackage) -> Unit = {}
|
private var stationName: String = ""
|
private var pageType: String = PickupActivity.TYPE_EXPRESS // 默认为快递类型
|
|
fun setStationInfo(station: String) {
|
stationName = station
|
}
|
|
fun setOnPackageClickListener(listener: (ExpressPackage) -> Unit) {
|
onPackageClickListener = listener
|
}
|
|
// 设置页面类型,用于决定使用哪种图标样式
|
fun setPageType(type: String) {
|
pageType = type
|
notifyDataSetChanged()
|
}
|
|
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)
|
}
|
|
// 防止部分内容不显示
|
override fun getItemCount(): Int {
|
return currentList.size
|
}
|
|
inner class ViewHolder(private val binding: ItemPackageBinding) :
|
RecyclerView.ViewHolder(binding.root) {
|
|
init {
|
binding.ivPackageStatus.setOnClickListener {
|
val position = adapterPosition
|
if (position != RecyclerView.NO_POSITION) {
|
val pack = getItem(position)
|
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(R.drawable.circle)
|
|
// 根据页面类型和公司名称设置相应的图标
|
val companyName = pack.company.lowercase()
|
val logoResId = when (pageType) {
|
PickupActivity.TYPE_EXPRESS -> getExpressLogo(companyName)
|
PickupActivity.TYPE_REPAYMENT -> getFinanceLogo(companyName)
|
PickupActivity.TYPE_INCOME -> getBankLogo(companyName)
|
// PickupActivity.TYPE_FLIGHT -> getFlightLogo(companyName)
|
// PickupActivity.TYPE_TRAIN -> getTrainLogo(companyName)
|
else -> R.drawable.express_normal
|
}
|
|
binding.ivCompanyLogo.setImageResource(logoResId)
|
}
|
|
// 获取快递公司图标
|
private fun getExpressLogo(companyName: String): Int {
|
return when {
|
companyName.isEmpty() || companyName == "未知" -> R.drawable.reminder_package_express
|
companyName.contains("顺丰") -> R.drawable.express_package_shunfeng
|
companyName.contains("韵达") -> R.drawable.express_package_yunda
|
companyName.contains("圆通") -> R.drawable.express_package_yuantong
|
companyName.contains("申通") -> R.drawable.express_package_shentong
|
companyName.contains("邮政") || companyName.contains("ems") -> R.drawable.express_package_youzheng
|
companyName.contains("极兔") -> R.drawable.express_package_jitu
|
else -> R.drawable.express_normal
|
}
|
}
|
|
// 获取金融/还款图标
|
private fun getFinanceLogo(companyName: String): Int {
|
return when {
|
companyName.isEmpty() || companyName == "未知" -> R.drawable.finance_income_bank_normal
|
companyName.contains("工商银行") -> R.drawable.bank_gongshang
|
companyName.contains("光大银行") -> R.drawable.bank_guangda
|
companyName.contains("国家开发银行") -> R.drawable.bank_guojiakaifa
|
companyName.contains("恒丰银行") -> R.drawable.bank_hengfeng
|
companyName.contains("华夏银行") -> R.drawable.bank_huaxia
|
companyName.contains("花呗分期") -> R.drawable.bank_huabeifenqi
|
companyName.contains("建设银行") -> R.drawable.bank_jianshe
|
companyName.contains("交通银行") -> R.drawable.bank_jiaotong
|
companyName.contains("民生银行") -> R.drawable.bank_mingsheng
|
companyName.contains("南京银行") -> R.drawable.bank_nanjing
|
companyName.contains("农商银行") -> R.drawable.bank_nongshang
|
companyName.contains("农业银行") -> R.drawable.bank_nongye
|
companyName.contains("平安银行") -> R.drawable.bank_pingan
|
companyName.contains("浦发银行") -> R.drawable.bank_pufa
|
companyName.contains("苏州银行") -> R.drawable.bank_suzhou
|
companyName.contains("邮储银行") -> R.drawable.bank_youzheng
|
companyName.contains("招商银行") -> R.drawable.bank_zhaoshang
|
companyName.contains("中国银行") -> R.drawable.bank_zhongguo
|
companyName.contains("中信银行") -> R.drawable.bank_zhongxin
|
companyName.contains("中原银行") -> R.drawable.bank_zhongyuan
|
companyName.contains("支付宝") -> R.drawable.finance_zhifubao
|
else -> R.drawable.finance_income_bank_normal
|
}
|
}
|
|
// 获取银行/收入图标
|
private fun getBankLogo(companyName: String): Int {
|
return when {
|
companyName.isEmpty() || companyName == "未知" -> R.drawable.finance_income_bank_normal
|
companyName.contains("工商银行") -> R.drawable.bank_gongshang
|
companyName.contains("光大银行") -> R.drawable.bank_guangda
|
companyName.contains("国家开发银行") -> R.drawable.bank_guojiakaifa
|
companyName.contains("恒丰银行") -> R.drawable.bank_hengfeng
|
companyName.contains("华夏银行") -> R.drawable.bank_huaxia
|
companyName.contains("花呗分期") -> R.drawable.bank_huabeifenqi
|
companyName.contains("建设银行") -> R.drawable.bank_jianshe
|
companyName.contains("交通银行") -> R.drawable.bank_jiaotong
|
companyName.contains("民生银行") -> R.drawable.bank_mingsheng
|
companyName.contains("南京银行") -> R.drawable.bank_nanjing
|
companyName.contains("农商银行") -> R.drawable.bank_nongshang
|
companyName.contains("农业银行") -> R.drawable.bank_nongye
|
companyName.contains("平安银行") -> R.drawable.bank_pingan
|
companyName.contains("浦发银行") -> R.drawable.bank_pufa
|
companyName.contains("苏州银行") -> R.drawable.bank_suzhou
|
companyName.contains("邮储银行") -> R.drawable.bank_youzheng
|
companyName.contains("招商银行") -> R.drawable.bank_zhaoshang
|
companyName.contains("中国银行") -> R.drawable.bank_zhongguo
|
companyName.contains("中信银行") -> R.drawable.bank_zhongxin
|
companyName.contains("中原银行") -> R.drawable.bank_zhongyuan
|
companyName.contains("支付宝") -> R.drawable.finance_zhifubao
|
else -> R.drawable.finance_income_bank_normal
|
}
|
}
|
|
// 获取航班图标
|
// private fun getFlightLogo(companyName: String): Int {
|
// return when {
|
// companyName.isEmpty() || companyName == "未知" -> R.drawable.flight_normal
|
// companyName.contains("南方航空") -> R.drawable.flight_nanfang
|
// companyName.contains("东方航空") -> R.drawable.flight_dongfang
|
// companyName.contains("国际航空") -> R.drawable.flight_guoji
|
// companyName.contains("海南航空") -> R.drawable.flight_hainan
|
// companyName.contains("吉祥航空") -> R.drawable.flight_jixiang
|
// companyName.contains("春秋航空") -> R.drawable.flight_chunqiu
|
// else -> R.drawable.flight_normal
|
// }
|
// }
|
|
// 获取火车票图标
|
// private fun getTrainLogo(companyName: String): Int {
|
// return when {
|
// companyName.isEmpty() || companyName == "未知" -> R.drawable.train_normal
|
// companyName.contains("高铁") -> R.drawable.train_gaotie
|
// companyName.contains("和谐号") -> R.drawable.train_hexiehao
|
// companyName.contains("动车") -> R.drawable.train_dongche
|
// companyName.contains("普通列车") -> R.drawable.train_putong
|
// else -> R.drawable.train_normal
|
// }
|
// }
|
}
|
}
|
|
private class PickupPackageDiffCallback : 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
|
}
|
}
|