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.ItemFinanceBinding
|
import com.example.firstapp.databinding.ItemFinanceGroupBinding
|
import com.example.firstapp.databinding.ItemFinancePackageHomeBinding
|
import com.example.firstapp.model.FinanceGroup
|
import com.example.firstapp.model.FinancePackage
|
|
class FinanceAdapter :
|
ListAdapter<FinanceGroup, FinanceAdapter.ViewHolder>(FinanceGroupDiffCallback()) {
|
|
private var onPackageClickListener: (FinanceGroup, FinancePackage) -> Unit = { _, _ -> }
|
|
fun setOnPackageClickListener(listener: (FinanceGroup, FinancePackage) -> Unit) {
|
onPackageClickListener = listener
|
}
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
val binding = ItemFinanceGroupBinding.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: ItemFinanceGroupBinding) :
|
RecyclerView.ViewHolder(binding.root) {
|
private val packagesAdapter = FinancePackageHomeAdapter { pack ->
|
currentGroup?.let { group ->
|
onPackageClickListener(group, pack)
|
}
|
}
|
private var currentGroup: FinanceGroup? = null
|
|
init {
|
// 设置固定高度和禁用嵌套滚动来解决滑动问题
|
binding.rvPackages.apply {
|
layoutManager = object : LinearLayoutManager(context) {
|
override fun canScrollVertically(): Boolean {
|
// 禁用内部RecyclerView的垂直滚动
|
return false
|
}
|
|
// 确保测量所有子项,防止部分内容不可见
|
override fun onLayoutChildren(recycler: RecyclerView.Recycler, state: RecyclerView.State) {
|
try {
|
super.onLayoutChildren(recycler, state)
|
} catch (e: IndexOutOfBoundsException) {
|
// 捕获可能的异常,防止崩溃
|
}
|
}
|
}
|
adapter = packagesAdapter
|
// 禁用嵌套滚动,让外部RecyclerView处理所有滚动
|
isNestedScrollingEnabled = false
|
// 启用回收视图缓存
|
setItemViewCacheSize(20)
|
setHasFixedSize(true)
|
}
|
}
|
|
fun bind(group: FinanceGroup) {
|
currentGroup = group
|
binding.tvStationName.text = group.stationName
|
binding.tvPackageCount.text = "共${group.packages.size}笔账单"
|
|
// 根据驿站名称设置相应的图标
|
val stationName = group.stationName.lowercase()
|
val stationIconResId = when {
|
stationName.isEmpty() || stationName == "未知" -> R.drawable.finance_huankuan_normal
|
stationName.contains("安逸花") -> R.drawable.finance_anyihua
|
stationName.contains("房贷") -> R.drawable.finance_fangdai
|
stationName.contains("还款") -> R.drawable.finance_huankuan
|
stationName.contains("花呗") -> R.drawable.finance_huabei
|
stationName.contains("借呗") -> R.drawable.finance_jiebei
|
stationName.contains("京东白条") -> R.drawable.finance_jingdongbaitiao
|
stationName.contains("京东金条") -> R.drawable.finance_jingdongjintiao
|
stationName.contains("汽车分期") -> R.drawable.finance_qichefenqi
|
stationName.contains("省呗") -> R.drawable.finance_shenbei
|
stationName.contains("信用卡") -> R.drawable.finance_xingyongka
|
stationName.contains("支付宝") -> R.drawable.finance_zhifubao
|
else -> R.drawable.finance_huankuan_normal
|
}
|
|
binding.ivStationIcon.setImageResource(stationIconResId)
|
|
// 确保所有数据都被更新
|
packagesAdapter.submitList(null)
|
packagesAdapter.submitList(group.packages)
|
|
// 请求布局刷新
|
binding.rvPackages.requestLayout()
|
}
|
|
fun setOnPackageClickListener(listener: (FinanceGroup, FinancePackage) -> Unit) {
|
// 这个方法可以移除,因为我们在构造 ExpressPackageHomeAdapter 时已经处理了点击事件
|
// 或者保留这个方法但不做任何操作
|
}
|
}
|
}
|
|
// 首页使用的包裹适配器 - 简化版本
|
class FinancePackageHomeAdapter(private val onPackageClick: (FinancePackage) -> Unit) :
|
ListAdapter<FinancePackage, FinancePackageHomeAdapter.ViewHolder>(FinancePackageDiffCallback()) {
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
val binding = ItemFinancePackageHomeBinding.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: ItemFinancePackageHomeBinding) :
|
RecyclerView.ViewHolder(binding.root) {
|
|
init {
|
binding.root.setOnClickListener {
|
val position = adapterPosition
|
if (position != RecyclerView.NO_POSITION) {
|
val pack = getItem(position)
|
onPackageClick(pack)
|
}
|
}
|
}
|
|
fun bind(pack: FinancePackage) {
|
binding.tvCompany.text = pack.company
|
binding.tvCreateTime.text = pack.createTime
|
binding.tvTrackingNumber.text = pack.trackingNumber
|
val companyName = pack.company.lowercase()
|
val logoResId = 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
|
}
|
binding.ivCompanyLogo.setImageResource(logoResId)
|
}
|
}
|
}
|
|
// 取件页面使用的包裹适配器
|
//class FinancePackageAdapter(private val onPackagePickup: (FinancePackage) -> Unit = { _ -> }) :
|
// ListAdapter<FinancePackage, FinancePackageAdapter.ViewHolder>(FinancePackageDiffCallback()) {
|
//
|
// private var onPackageClickListener: (FinancePackage) -> Unit = {}
|
// private var stationName: String = ""
|
//
|
// fun setStationInfo(station: String) {
|
// stationName = station
|
// }
|
//
|
// fun setOnPackageClickListener(listener: (FinancePackage) -> Unit) {
|
// onPackageClickListener = listener
|
// }
|
//
|
// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
// val binding = ItemFinanceBinding.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: ItemFinanceBinding) :
|
// 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: FinancePackage) {
|
// 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
|
// )
|
// // 根据快递公司名称设置相应的图标
|
// val companyName = pack.company.lowercase()
|
// val logoResId = 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
|
// else -> R.drawable.finance_income_bank_normal
|
// }
|
//
|
// binding.ivCompanyLogo.setImageResource(logoResId)
|
//
|
// }
|
// }
|
//}
|
|
|
private class FinanceGroupDiffCallback : DiffUtil.ItemCallback<FinanceGroup>() {
|
override fun areItemsTheSame(oldItem: FinanceGroup, newItem: FinanceGroup): Boolean {
|
return oldItem.stationName == newItem.stationName
|
}
|
|
override fun areContentsTheSame(oldItem: FinanceGroup, newItem: FinanceGroup): Boolean {
|
return oldItem == newItem
|
}
|
}
|
|
private class FinancePackageDiffCallback : DiffUtil.ItemCallback<FinancePackage>() {
|
override fun areItemsTheSame(oldItem: FinancePackage, newItem: FinancePackage): Boolean {
|
return oldItem.trackingNumber == newItem.trackingNumber
|
}
|
|
override fun areContentsTheSame(oldItem: FinancePackage, newItem: FinancePackage): Boolean {
|
return oldItem == newItem
|
}
|
}
|