如何在没有生命周期的ViewGroup或自定义类中使用LiveData?

时间:2019-04-15 06:27:30

标签: android-livedata mutablelivedata

我的活动的布局很复杂,因此我将其分为几个简单的布局。要在每个单独的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正确显示,但它什么也没有显示。在锁定屏幕然后解锁后,用户界面立即显示正确。

0 个答案:

没有答案