From 1214ca92a4d6784de6ee08268b8d44de7242a5a3 Mon Sep 17 00:00:00 2001 From: dongliang Date: Mon, 11 May 2026 10:26:29 +0930 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E7=BB=91=E5=A4=84=E7=90=86?= =?UTF-8?q?=E7=A7=BB=E5=88=B0MainActivity=EF=BC=8C=E7=94=A8=E5=85=A8?= =?UTF-8?q?=E5=B1=80action=E4=BB=8E=E4=BB=BB=E4=BD=95=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit HomeFragment在子页面时viewLifecycleOwner被销毁,collect停止, 收不到解绑消息。改为Activity级别处理+全局导航action,彻底解决。 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../java/com/xiaoqu/watch/app/MainActivity.kt | 28 +++++++++++++++---- .../com/xiaoqu/watch/ui/home/HomeFragment.kt | 20 +------------ app/src/main/res/navigation/nav_main.xml | 5 ++++ 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/xiaoqu/watch/app/MainActivity.kt b/app/src/main/java/com/xiaoqu/watch/app/MainActivity.kt index 69d7919..1058729 100644 --- a/app/src/main/java/com/xiaoqu/watch/app/MainActivity.kt +++ b/app/src/main/java/com/xiaoqu/watch/app/MainActivity.kt @@ -9,6 +9,7 @@ import android.os.PowerManager import android.provider.Settings import android.view.MotionEvent import android.view.View +import androidx.navigation.findNavController import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AppCompatActivity import com.xiaoqu.watch.databinding.ActivityMainBinding @@ -112,17 +113,32 @@ class MainActivity : AppCompatActivity() { // ===== MQTT 新任务处理 ===== - /** 监听 MQTT type=1 → 通知管理器处理 → 横幅 + NewTaskArrived 事件 */ + /** 监听 MQTT 消息(Activity 级别,不受 Fragment 生命周期影响) */ private fun observeMqttMessages() { activityScope.launch { eventBus.events.collect { event -> when (event) { is AppEvent.MqttMessageReceived -> { - if (event.type == 1) { - notificationManager.onNewTaskMessage(event.rawJson) - val count = notificationManager.pendingCount - if (count > 0) { - notificationBanner.show(count) + when (event.type) { + 1 -> { + // 新任务通知 + notificationManager.onNewTaskMessage(event.rawJson) + val count = notificationManager.pendingCount + if (count > 0) { + notificationBanner.show(count) + } + } + 3 -> { + // 解绑 → 清除数据 → 跳绑定页(从任何页面都能跳) + Timber.d("MainActivity: 收到解绑消息") + bluetoothScanManager.stop() + userPrefs.clear() + try { + findNavController(R.id.nav_host_fragment) + .navigate(R.id.action_global_to_bind) + } catch (e: Exception) { + Timber.w(e, "MainActivity: 解绑导航异常") + } } } } 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 63e5f3a..8c907ca 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 @@ -626,25 +626,7 @@ class HomeFragment : BaseFragment() { Timber.d("首页: 收到日常动态") fetchStatistics() } - 3 -> { - // 解绑 → 停止蓝牙 → 清除数据 → 跳绑定页 - Timber.d("首页: 收到解绑消息") - bluetoothScanManager.stop() - userPrefs.clear() - 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, "首页: 解绑导航异常") - } - } + // type=3 解绑已移到 MainActivity 处理(Activity 级别,不受 Fragment 生命周期影响) 4 -> { // 系统参数变更(蓝牙/NFC 配置) Timber.d("首页: 收到系统参数变更") diff --git a/app/src/main/res/navigation/nav_main.xml b/app/src/main/res/navigation/nav_main.xml index 98485c7..ce15a38 100644 --- a/app/src/main/res/navigation/nav_main.xml +++ b/app/src/main/res/navigation/nav_main.xml @@ -4,6 +4,11 @@ android:id="@+id/nav_main" app:startDestination="@id/splashFragment"> + + +