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