我的活动的布局很复杂,因此我将其分为几个简单的布局。要在每个单独的ViewGroup中使用LiveData,我将Fragment生命周期注入到ViewGroup中,一切似乎正常。调用观察者方法,但锁定屏幕然后解锁后,UI不会显示,UI会立即正确显示。
internal class CarLockViewHolder @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int
= 0
) : LifecycleOwner, FrameLayout(context, attrs, defStyleAttr) {
override fun getLifecycle(): Lifecycle =
CarFragment.getInstance().lifecycle
private fun initUpdateAlertViewObserver() {
val contentObserver = Observer<Int> {
currentAlertType = it ?: 0
if (currentAlertType != 0) {
updateContent()
updateLayoutParams()
}
}
carAlertViewModel.showAlertViewType.observeForever(contentObserver)
}
}
ViewModel :
var showAlertViewType = MediatorLiveData<Int>()
get() {
field.apply {
addSource(isActive) {
value = combineResult()
}
addSource(carFailCount) {
value = combineResult()
}
addSource(needShowFeed) {
value = combineResult()
}
addSource(isFeed) {
value = combineResult()
}
addSource(maintainType) {
value = combineResult()
}
}
return field
}
当LiveData的值更改时,将调用方法updateContent()和updateLayoutParams(),那么我认为我可以使UI正确显示,但它什么也没有显示。在锁定屏幕然后解锁后,用户界面立即显示正确。