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