From 33c7ed565ad6bfb30eee84acc33b39e6b639ade9 Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期五, 18 四月 2025 08:54:45 +0800
Subject: [PATCH] fix: 样式

---
 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