From d9cfd3007df783f105114cd3071642e54f226066 Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Mon, 18 May 2026 09:43:42 +0800 Subject: [PATCH] =?UTF-8?q?fix(ui):=20=E4=BF=AE=E5=A4=8D=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E7=8A=B6=E6=80=81=E7=AE=A1=E7=90=86=E5=92=8C?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E4=BA=A4=E4=BA=92=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加了 clipToOutline 和 foreground 属性以改善列表项视觉效果 - 修复了 UiState 处理中未重置商品列表状态的问题 - 优化了 searchFood 方法中的状态重置逻辑,避免重复调用 - 修复了空视图点击监听器设置时机,确保在状态视图挂载完成后添加监听器 - 移除了重复的搜索调用,解决因 setText 触发的多次搜索问题 --- .../ui/fragment/VectorCollectionFragment.kt | 29 +++++++++---------- app/src/main/res/layout/list_item_food3.xml | 4 ++- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/shuwei/dish/match/ui/fragment/VectorCollectionFragment.kt b/app/src/main/java/com/shuwei/dish/match/ui/fragment/VectorCollectionFragment.kt index 1018397..e8cb506 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/fragment/VectorCollectionFragment.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/fragment/VectorCollectionFragment.kt @@ -313,11 +313,13 @@ class VectorCollectionFragment : BaseFragment() is UiState.Success -> { val list = state.data ?: emptyList() if (list.isEmpty()) loadEmptyView() else fillSearchList(list) + currentActivity.netViewModel.resetGoodsListState() } is UiState.Error -> { toast(state.msg) loadEmptyView() + currentActivity.netViewModel.resetGoodsListState() } else -> Unit @@ -383,16 +385,15 @@ class VectorCollectionFragment : BaseFragment() @SuppressLint("NotifyDataSetChanged") fun searchFood() { + log("searchFood") + // 立即重置,防止 StateFlow 向新订阅者重播旧的错误状态 + currentActivity.netViewModel.resetGoodsListState() debouncer.debounce { val keyword = binding.editFoodName.text.toString().trim() - // 通过 NetViewModel 查询净材数据(goodsType=0 食材),结果由 initialize() 中的 observer 统一处理 - currentActivity.netViewModel.run { - resetGoodsListState() - queryGoodsList( - goodsType = "0", - goodsName = keyword.ifEmpty { null } - ) - } + currentActivity.netViewModel.queryGoodsList( + goodsType = "0", + goodsName = keyword.ifEmpty { null } + ) } } @@ -445,14 +446,12 @@ class VectorCollectionFragment : BaseFragment() emptyViewBinding?.let { it.tvContent.text = "暂无数据" it.tvSubContent.text = "未查询到食材信息,请稍后重试" - // 点击空布局 - it.root.setOnClickListener { - //填充本地假数据,便于 UI 效果测试 - //fillSearchList(buildMockGoodsList()) - searchFood() - } binding.rvSearchFood.post { it.root.minimumHeight = binding.rvSearchFood.height + // 在 stateView 挂载完成后再设置点击监听,避免 adapter 重置 view 状态时丢失监听器 + it.root.setOnClickListener { + searchFood() + } searchAdapter.stateView = it.root } } @@ -477,8 +476,8 @@ class VectorCollectionFragment : BaseFragment() vectorAdapter.notifyDataSetChanged() clickIndex = -1 + // setText("") 会触发 addTextChangedListener → searchFood(),无需再次直接调用 binding.editFoodName.setText("") - searchFood() } private var isFirstOpen = true diff --git a/app/src/main/res/layout/list_item_food3.xml b/app/src/main/res/layout/list_item_food3.xml index a8868c6..4aea4c3 100644 --- a/app/src/main/res/layout/list_item_food3.xml +++ b/app/src/main/res/layout/list_item_food3.xml @@ -19,7 +19,9 @@ android:textSize="28sp" android:textStyle="bold" android:background="@drawable/bg_item_search" - tools:text="土豆丝" /> + tools:text="土豆丝" + android:clipToOutline="true" + android:foreground="?android:attr/selectableItemBackground"/>