From 52584b9cfeed6d4b137b9300e731f82021c98f83 Mon Sep 17 00:00:00 2001 From: YANG JIANKUAN Date: Fri, 11 Sep 2026 15:08:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=9B=BD=E9=99=85=E5=87=BA=E6=B8=AF?= =?UTF-8?q?=E6=9D=BF=E7=AE=B1=E8=BF=87=E7=A3=85=E9=87=8D=E8=BF=9B=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=97=B6=E8=87=AA=E5=8A=A8=E9=80=89=E4=B8=AD=E4=B8=8A?= =?UTF-8?q?=E6=AC=A1=E9=80=9A=E9=81=93=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原实现只把上次通道号排到字典列表首位,但带 hint 的 Spinner 默认停在 hint 项, 导致退出再进入(含从列表点 ULD 进入的编辑模式)时通道号始终显示「请选择通道号」。 改为字典加载完成后按「本条记录通道号 → 上次记住的通道号」优先级显式赋值。 Co-Authored-By: Claude Fable 5.1 --- .../viewModel/GjcBoxWeighingAddViewModel.kt | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcBoxWeighingAddViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcBoxWeighingAddViewModel.kt index 29bcb18..39e307b 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcBoxWeighingAddViewModel.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcBoxWeighingAddViewModel.kt @@ -120,12 +120,12 @@ class GjcBoxWeighingAddViewModel : BaseViewModel() { val editBean = intent?.getSerializableExtra(Constant.Key.BEAN) as? GjcUldUseBean if (editBean != null) { prefillFromBean(editBean) - loadPassagewayList(editBean.passagewayId) + // 优先本条记录自带的通道号,没有则回退到上一次称重记住的通道号(App 级持久化) + loadPassagewayList(editBean.passagewayId.ifEmpty { null }) loadPlCloseList(editBean.plClose) } else { // 新增模式:默认选中上一次称重使用的通道号 - val lastPassagewayId = SharedPreferenceUtil.getString(KEY_LAST_PASSAGEWAY_ID) - loadPassagewayList(lastPassagewayId.ifEmpty { null }) + loadPassagewayList(null) loadPlCloseList(null) } } @@ -239,15 +239,27 @@ class GjcBoxWeighingAddViewModel : BaseViewModel() { /** * 加载通道号列表 - * @param checkedValue 编辑模式下需要选中的 passagewayId;为空则按返回顺序展示 + * @param preferredId 编辑模式下本条记录自带的 passagewayId;为空则回退到上一次称重记住的通道号 + * + * 注意:Spinner 带 hint 时默认停在 hint 项,并不会显示列表首项, + * 所以必须显式给 channel 赋值才能选中,只调列表顺序无效。 */ - private fun loadPassagewayList(checkedValue: String?) { + private fun loadPassagewayList(preferredId: String?) { launchCollect({ NetApply.api.getDictList("GJPASSAGEWAY") }) { onSuccess = { val list = (it.data ?: emptyList()).map { b -> b.toKeyValue() } - passagewayList.value = reorderChecked(list, checkedValue) + passagewayList.value = list + + // 选中优先级:本条记录的通道号 → 上一次称重记住的通道号(SharedPreference,跨页面、跨启动保留) + val lastPassagewayId = SharedPreferenceUtil.getString(KEY_LAST_PASSAGEWAY_ID) + val selected = listOf(preferredId, lastPassagewayId).firstOrNull { id -> + !id.isNullOrEmpty() && list.any { kv -> kv.value == id } + } + if (selected != null) { + channel.value = selected + } } } }