Как использовать LiveData в ViewGroup или Custom Class без жизненного цикла? - PullRequest
0 голосов
/ 15 апреля 2019

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

...