LiveData Observer not called when using postponeEnterTransition

Viewed 204

I'm following the documentation here to start a transition after fetching data: https://developer.android.com/guide/fragments/animate#recyclerview

The viewModel code is invoked and runs successfully, but the observer is never called when postponeEnterTransition is used. If I remove postponeEnterTransition, then the observer is called.

I'm not sure what I'm doing wrong.

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    postponeEnterTransition()

    homeViewModel.data.observe(viewLifecycleOwner) {
        // TODO: set data on adapter

        startPostponedEnterTransition()
    }

    homeViewModel.fetchData()
}

And here is my view model code:

class HomeViewModel(private val repository: Repository) : ViewModel() {
    val loading: MutableLiveData<Boolean> by lazy {
        MutableLiveData<Boolean>()
    }

    val data: MutableLiveData<List<Data>> by lazy {
        MutableLiveData<List<Data>>()
    }

    fun fetchData() {
        loading.postValue(true)
        viewModelScope.launch {
            val result = repository.fetchData()
            result?.let {
                when(it) {
                    is Result.Success -> data.postValue(it.data)
                    is Result.Error -> "" // TODO: Handle error
                }
            }
            loading.postValue(false)
        }
    }
}
0 Answers
Related