From ae8f0be7002fa5d24118f8a1605e2b5b535fafd9 Mon Sep 17 00:00:00 2001 From: renwj Date: Tue, 10 Sep 2024 15:57:54 +0800 Subject: [PATCH] =?UTF-8?q?[6.6.0][=E7=8A=B6=E6=80=81=E6=A0=8F]=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=8A=B6=E6=80=81=E7=AE=A1=E7=90=86=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../status/StatusManager.kt | 4 +++ .../status/ui/StatusView.kt | 25 +++++++++++-------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/StatusManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/StatusManager.kt index 74f0f09e09..8cd8017ddc 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/StatusManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/StatusManager.kt @@ -180,6 +180,10 @@ object StatusManager { return } listeners[tag] = listener + try { + val all = model.status.value?.second ?: emptyList() + listener.onStatusChanged(all, all) + } catch (ignore: Throwable) {} } fun removeListener(tag: String) { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/ui/StatusView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/ui/StatusView.kt index 2f68efd37d..7be0d877f5 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/ui/StatusView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/ui/StatusView.kt @@ -34,6 +34,21 @@ internal class StatusView(private val model: StatusModel, ctx: Context): Constra init() } + override fun onAttachedToWindow() { + super.onAttachedToWindow() + val adapter = model.status.value?.let { data -> StatusAdapter(context, data.second.filter { (it !is IAutopilotPreLaunchStatus) || (it is FSMStatus)}) }?.also { adapter -> rv.adapter = adapter } + adapter?.let { _ -> + observer?.also { model.status.removeObserver(it) } + model.status.observeForever(Observer>> { data -> + val old = adapter.data + val update = data.second.filter { (it !is IAutopilotPreLaunchStatus) || (it is FSMStatus) } + val result = DiffUtil.calculateDiff(StatusDiffCallback(old, update)) + adapter.data = update + result.dispatchUpdatesTo(adapter) + }.also { observer = it }) + } + } + private fun init() { rv.also { itx -> itx.itemAnimator?.run { @@ -49,16 +64,6 @@ internal class StatusView(private val model: StatusModel, ctx: Context): Constra .horizontalInnerSpace(10.PX) .build() ) - val adapter = model.status.value?.let { data -> StatusAdapter(context, data.second.filter { (it !is IAutopilotPreLaunchStatus) || (it is FSMStatus)}) }?.also { adapter -> itx.adapter = adapter } - adapter?.let { _ -> - model.status.observeForever(Observer>> { data -> - val old = adapter.data - val update = data.second.filter { (it !is IAutopilotPreLaunchStatus) || (it is FSMStatus) } - val result = DiffUtil.calculateDiff(StatusDiffCallback(old, update)) - adapter.data = update - result.dispatchUpdatesTo(adapter) - }.also { observer = it }) - } } // onDetach {