From 04b138d3836e03c9adbcbd367fd71d92905c5206 Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期四, 17 四月 2025 13:17:45 +0800
Subject: [PATCH] add: 重复登录处理
---
app/src/main/java/com/example/firstapp/adapter/FinanceAdapter.kt | 52 +++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 47 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/com/example/firstapp/adapter/FinanceAdapter.kt b/app/src/main/java/com/example/firstapp/adapter/FinanceAdapter.kt
index b0e39a4..16bbf8d 100644
--- a/app/src/main/java/com/example/firstapp/adapter/FinanceAdapter.kt
+++ b/app/src/main/java/com/example/firstapp/adapter/FinanceAdapter.kt
@@ -46,9 +46,29 @@
private var currentGroup: FinanceGroup? = 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)
}
}
@@ -56,7 +76,13 @@
currentGroup = group
binding.tvStationName.text = group.stationName
binding.tvPackageCount.text = "共${group.packages.size}笔账单"
+
+ // 确保所有数据都被更新
+ packagesAdapter.submitList(null)
packagesAdapter.submitList(group.packages)
+
+ // 请求布局刷新
+ binding.rvPackages.requestLayout()
}
fun setOnPackageClickListener(listener: (FinanceGroup, FinancePackage) -> Unit) {
@@ -81,14 +107,22 @@
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 pack = getItem(adapterPosition)
- onPackageClick(pack)
+ val position = adapterPosition
+ if (position != RecyclerView.NO_POSITION) {
+ val pack = getItem(position)
+ onPackageClick(pack)
+ }
}
}
@@ -126,14 +160,22 @@
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 pack = getItem(adapterPosition)
- onPackagePickup(pack)
+ val position = adapterPosition
+ if (position != RecyclerView.NO_POSITION) {
+ val pack = getItem(position)
+ onPackagePickup(pack)
+ }
}
binding.root.setOnClickListener(null)
--
Gitblit v1.9.3