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.ItemIncomeGroupBinding
|
import com.example.firstapp.databinding.ItemIncomePackageHomeBinding
|
import com.example.firstapp.model.IncomeGroup
|
import com.example.firstapp.model.IncomePackage
|
|
class IncomeAdapter : ListAdapter<IncomeGroup, IncomeAdapter.ViewHolder>(IncomeGroupDiffCallback()) {
|
|
private var onPackageClickListener: (IncomeGroup, IncomePackage) -> Unit = { _, _ -> }
|
|
fun setOnPackageClickListener(listener: (IncomeGroup, IncomePackage) -> Unit) {
|
onPackageClickListener = listener
|
}
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
val binding = ItemIncomeGroupBinding.inflate(
|
LayoutInflater.from(parent.context), parent, false
|
)
|
return ViewHolder(binding)
|
}
|
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
val group = getItem(position)
|
holder.bind(group)
|
}
|
|
inner class ViewHolder(private val binding: ItemIncomeGroupBinding) :
|
RecyclerView.ViewHolder(binding.root) {
|
private val packagesAdapter = IncomePackageHomeAdapter { pack ->
|
currentGroup?.let { group ->
|
onPackageClickListener(group, pack)
|
}
|
}
|
private var currentGroup: IncomeGroup? = null
|
|
init {
|
binding.rvPackages.apply {
|
layoutManager = object : LinearLayoutManager(context) {
|
override fun canScrollVertically(): Boolean {
|
return false
|
}
|
|
override fun onLayoutChildren(recycler: RecyclerView.Recycler, state: RecyclerView.State) {
|
try {
|
super.onLayoutChildren(recycler, state)
|
} catch (e: IndexOutOfBoundsException) {
|
// 捕获可能的异常,防止崩溃
|
}
|
}
|
}
|
adapter = packagesAdapter
|
isNestedScrollingEnabled = false
|
setItemViewCacheSize(20)
|
setHasFixedSize(true)
|
}
|
}
|
|
fun bind(group: IncomeGroup) {
|
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_income_bank_normal
|
stationName.contains("工商银行") -> R.drawable.bank_gongshang
|
stationName.contains("光大银行") -> R.drawable.bank_guangda
|
stationName.contains("国家开发银行") -> R.drawable.bank_guojiakaifa
|
stationName.contains("恒丰银行") -> R.drawable.bank_hengfeng
|
stationName.contains("华夏银行") -> R.drawable.bank_huaxia
|
stationName.contains("花呗分期") -> R.drawable.bank_huabeifenqi
|
stationName.contains("建设银行") -> R.drawable.bank_jianshe
|
stationName.contains("交通银行") -> R.drawable.bank_jiaotong
|
stationName.contains("民生银行") -> R.drawable.bank_mingsheng
|
stationName.contains("南京银行") -> R.drawable.bank_nanjing
|
stationName.contains("农商银行") -> R.drawable.bank_nongshang
|
stationName.contains("农业银行") -> R.drawable.bank_nongye
|
stationName.contains("平安银行") -> R.drawable.bank_pingan
|
stationName.contains("浦发银行") -> R.drawable.bank_pufa
|
stationName.contains("苏州银行") -> R.drawable.bank_suzhou
|
stationName.contains("邮储银行") -> R.drawable.bank_youzheng
|
stationName.contains("招商银行") -> R.drawable.bank_zhaoshang
|
stationName.contains("中国银行") -> R.drawable.bank_zhongguo
|
stationName.contains("中信银行") -> R.drawable.bank_zhongxin
|
stationName.contains("中原银行") -> R.drawable.bank_zhongyuan
|
else -> R.drawable.finance_income_bank_normal
|
}
|
|
binding.ivStationIcon.setImageResource(stationIconResId)
|
|
packagesAdapter.submitList(null)
|
packagesAdapter.submitList(group.packages)
|
|
binding.rvPackages.requestLayout()
|
}
|
}
|
}
|
|
class IncomePackageHomeAdapter(private val onPackageClick: (IncomePackage) -> Unit) :
|
ListAdapter<IncomePackage, IncomePackageHomeAdapter.ViewHolder>(IncomePackageDiffCallback()) {
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
val binding = ItemIncomePackageHomeBinding.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: ItemIncomePackageHomeBinding) :
|
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: IncomePackage) {
|
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)
|
// binding.tvBalance.text = "余额: ¥${pack.balance}"
|
}
|
}
|
}
|
|
private class IncomeGroupDiffCallback : DiffUtil.ItemCallback<IncomeGroup>() {
|
override fun areItemsTheSame(oldItem: IncomeGroup, newItem: IncomeGroup): Boolean {
|
return oldItem.stationName == newItem.stationName
|
}
|
|
override fun areContentsTheSame(oldItem: IncomeGroup, newItem: IncomeGroup): Boolean {
|
return oldItem == newItem
|
}
|
}
|
|
private class IncomePackageDiffCallback : DiffUtil.ItemCallback<IncomePackage>() {
|
override fun areItemsTheSame(oldItem: IncomePackage, newItem: IncomePackage): Boolean {
|
return oldItem.id == newItem.id
|
}
|
|
override fun areContentsTheSame(oldItem: IncomePackage, newItem: IncomePackage): Boolean {
|
return oldItem == newItem
|
}
|
}
|