From d3b69c4e462c427e91bc28ce19f75e3bc9c18a47 Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Mon, 20 Apr 2026 09:08:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(fragment):=20=E4=BF=AE=E5=A4=8D=20weightSna?= =?UTF-8?q?pshot=20key=20=E5=9B=A0=20Int=20=E6=BA=A2=E5=87=BA=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E4=B8=BB=E8=AE=BE=E5=A4=87=E9=AB=98=E4=BA=AE=E5=A4=B1?= =?UTF-8?q?=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 snapshotKey 从 Int(address + hashCode*1000 易溢出)改为 String(deviceId#address), 避免不同设备的基准值互相覆盖,导致 delta 永远无法正确计算 --- .../match/ui/fragment/SeasoningConfigFragment.kt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/shuwei/dish/match/ui/fragment/SeasoningConfigFragment.kt b/app/src/main/java/com/shuwei/dish/match/ui/fragment/SeasoningConfigFragment.kt index ff114c3..f4f2700 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/fragment/SeasoningConfigFragment.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/fragment/SeasoningConfigFragment.kt @@ -47,8 +47,8 @@ class SeasoningConfigFragment : BaseFragment() { private val adapter22 by lazy { buildAdapter22() } private val adapter18 by lazy { Seasoning18GridAdapter() } - /** 各秤地址的上一次重量快照,用于计算 delta */ - private val weightSnapshot = mutableMapOf() + /** 各秤的上一次重量快照,key 格式 "{deviceId}#{address}",用于计算 delta */ + private val weightSnapshot = mutableMapOf() /** 主线程 Handler,用于延迟清除高亮 */ private val mainHandler = Handler(Looper.getMainLooper()) /** 当前高亮清除任务,新高亮触发时取消旧任务 */ @@ -161,7 +161,7 @@ class SeasoningConfigFragment : BaseFragment() { viewLifecycleOwner.lifecycleScope.launch { allScalesFlow.collect { scaleMap -> scaleMap.forEach { (key, data) -> - val snapshotKey = data.address + data.deviceId.hashCode() * 1000 + val snapshotKey = "${data.deviceId}#${data.address}" val baseline = weightSnapshot[snapshotKey] if (baseline == null) { // 首次收到:记录基准 @@ -187,11 +187,12 @@ class SeasoningConfigFragment : BaseFragment() { } else { // 子设备:注册本机 WeightUtil 监听,触发后通过 broadcastEvent 通知主设备 WeightUtil.addWeightListener(TAG) { address, state, weight -> - val baseline = weightSnapshot[address] + val snapshotKey = "${GlobalData.deviceId}#$address" + val baseline = weightSnapshot[snapshotKey] Log.d(TAG, "onWeight: address=$address state=$state weight=$weight baseline=$baseline") if (baseline == null) { - weightSnapshot[address] = weight + weightSnapshot[snapshotKey] = weight return@addWeightListener } @@ -201,12 +202,12 @@ class SeasoningConfigFragment : BaseFragment() { when { // 仅在秤稳定后判断增量,避免取走物品时手部冲力造成误触发 state == WeightUtil.STATE_STABLE && delta > WEIGHT_DELTA_THRESHOLD -> { - weightSnapshot[address] = weight + weightSnapshot[snapshotKey] = weight Log.d(TAG, "onWeight: 触发高亮 address=$address delta=$delta") triggerHighlight(GlobalData.deviceId, address, delta) } state == WeightUtil.STATE_STABLE -> { - weightSnapshot[address] = weight + weightSnapshot[snapshotKey] = weight } } }