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 {