diff --git a/app/src/main/java/com/xiaoqu/watch/ui/bind/BindFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/bind/BindFragment.kt index 6b53435..9a8c637 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/bind/BindFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/bind/BindFragment.kt @@ -148,7 +148,14 @@ class BindFragment : BaseFragment() { * 3. 调用 bindWatchConfirm API 确认 * 4. 导航到首页 */ + /** 防重复处理标记 */ + private var bindHandled = false + private fun handleBindSuccess(rawJson: String) { + // 防止重复处理(MQTT 可能重发) + if (bindHandled) return + bindHandled = true + try { Timber.d("绑定: 收到绑定消息 $rawJson") @@ -185,6 +192,7 @@ class BindFragment : BaseFragment() { } catch (e: Exception) { Timber.e(e, "绑定: 处理绑定消息异常") + bindHandled = false // 异常时允许重试 // 异常时恢复二维码显示 showQrCode() } diff --git a/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt index c601c66..63e5f3a 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt @@ -136,7 +136,10 @@ class HomeFragment : BaseFragment() { updateCardNum(tvPunchNum, cachedPunch) updateCardNum(tvCompleteNum, cachedComplete) - // 再异步请求最新数据,静默更新 + 持久化 + // 立即开始监听事件(不等 API 返回,避免解绑等关键消息丢失) + observeEvents() + + // 异步请求最新统计数据 viewLifecycleOwner.lifecycleScope.launch { val result = safeApiCall { taskApi.getStatistics() } if (result is ApiResult.Success && result.data != null) { @@ -152,9 +155,6 @@ class HomeFragment : BaseFragment() { .putInt("complete", data.incompleteTask) .apply() } - - // 基准设好后再开始监听事件 - observeEvents() } // 监听打卡状态 @@ -631,7 +631,19 @@ class HomeFragment : BaseFragment() { Timber.d("首页: 收到解绑消息") bluetoothScanManager.stop() userPrefs.clear() - findNavController().navigate(R.id.action_home_to_bind) + try { + // 确保当前在 homeFragment 才能导航 + val navController = findNavController() + if (navController.currentDestination?.id == R.id.homeFragment) { + navController.navigate(R.id.action_home_to_bind) + } else { + // 在子页面(任务列表/详情),先弹回首页再跳绑定 + navController.popBackStack(R.id.homeFragment, false) + navController.navigate(R.id.action_home_to_bind) + } + } catch (e: Exception) { + Timber.w(e, "首页: 解绑导航异常") + } } 4 -> { // 系统参数变更(蓝牙/NFC 配置)