[6.6.0][状态栏] 优化状态管理逻辑
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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<Pair<Status?, ArrayList<Status>>> { 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<Pair<Status?, ArrayList<Status>>> { 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 {
|
||||
|
||||
Reference in New Issue
Block a user