Макет моей Деятельности сложен, поэтому я разделяю его на несколько простых макетов. Чтобы использовать LiveData в каждой отдельной ViewGroup, я ввел жизненный цикл Fragment в ViewGroup, и все выглядит нормально. Метод наблюдателя вызывается, но пользовательский интерфейс не отображается после того, как я заблокирую экран, а затем разблокирую U пользовательский интерфейс отображается правильно.
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 (), тогда я думаю, что могу правильно отобразить пользовательский интерфейс, но он просто ничего не показывает, после того как я заблокирую экран и затем разблокирую , Пользовательский интерфейс показывает правильный сразу.