From acb5be78c07b8499d0a38515b05a4982207c1c9a Mon Sep 17 00:00:00 2001
From: zhujie <leon.zhu@cloudroam.com.cn>
Date: 星期五, 18 四月 2025 15:24:16 +0800
Subject: [PATCH] Merge branch 'master' of http://47.96.225.205:8888/r/FirstApp2
---
app/src/main/java/com/example/firstapp/adapter/ExpressAdapter.kt | 97 ++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 92 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/com/example/firstapp/adapter/ExpressAdapter.kt b/app/src/main/java/com/example/firstapp/adapter/ExpressAdapter.kt
index 6bffe16..d6417cd 100644
--- a/app/src/main/java/com/example/firstapp/adapter/ExpressAdapter.kt
+++ b/app/src/main/java/com/example/firstapp/adapter/ExpressAdapter.kt
@@ -44,9 +44,29 @@
private var currentGroup: ExpressGroup? = null
init {
+ // 设置固定高度和禁用嵌套滚动来解决滑动问题
binding.rvPackages.apply {
- layoutManager = LinearLayoutManager(context)
+ 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)
}
}
@@ -54,7 +74,28 @@
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.express_normal
+ stationName.contains("菜鸟") -> R.drawable.express_cainiao
+ stationName.contains("多多") -> R.drawable.express_duoduo
+ stationName.contains("兔喜") -> R.drawable.express_tuxi
+ stationName.contains("妈妈") -> R.drawable.express_mama
+ stationName.contains("小兵") -> R.drawable.express_xiaobing
+ stationName.contains("蓝店") -> R.drawable.express_landian
+ else -> R.drawable.express_normal
+ }
+
+ binding.ivStationIcon.setImageResource(stationIconResId)
+
+ // 确保所有数据都被更新
+ packagesAdapter.submitList(null)
packagesAdapter.submitList(group.packages)
+
+ // 请求布局刷新
+ binding.rvPackages.requestLayout()
}
fun setOnPackageClickListener(listener: (ExpressGroup, ExpressPackage) -> Unit) {
@@ -80,13 +121,21 @@
holder.bind(pack)
}
+ // 防止部分内容不显示
+ override fun getItemCount(): Int {
+ return currentList.size
+ }
+
inner class ViewHolder(private val binding: ItemExpressPackageHomeBinding) :
RecyclerView.ViewHolder(binding.root) {
init {
binding.root.setOnClickListener {
- val pack = getItem(adapterPosition)
- onPackageClick(pack)
+ val position = adapterPosition
+ if (position != RecyclerView.NO_POSITION) {
+ val pack = getItem(position)
+ onPackageClick(pack)
+ }
}
}
@@ -94,6 +143,21 @@
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.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
+ }
+
+ binding.ivCompanyLogo.setImageResource(logoResId)
}
}
}
@@ -125,13 +189,21 @@
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 pack = getItem(adapterPosition)
- onPackagePickup(pack)
+ val position = adapterPosition
+ if (position != RecyclerView.NO_POSITION) {
+ val pack = getItem(position)
+ onPackagePickup(pack)
+ }
}
binding.root.setOnClickListener(null)
@@ -147,6 +219,21 @@
// else R.drawable.circle
R.drawable.circle
)
+
+ // 根据快递公司名称设置相应的图标
+ val companyName = pack.company.lowercase()
+ val logoResId = 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
+ }
+
+ binding.ivCompanyLogo.setImageResource(logoResId)
}
}
}
--
Gitblit v1.9.3