Наблюдение за экземпляром LiveData из View - PullRequest
0 голосов
/ 17 октября 2018

Я создал ViewGroup, которая обновляет ее содержимое в зависимости от состояния экземпляра LiveData, однако я не знаю, может ли наблюдение за экземпляром LiveData в представлении вызвать некоторые проблемы?

Это код, который я использую, он удаляет наблюдателя при вызове onDestroyView.

@BindingAdapter("stateLive")
fun <T> AsyncLayout.setStateLive(stateLive: LiveData<Resource<T>>?) {
    stateLive?.apply {
        val observer: Observer<Resource<T>> = Observer { it ->
            it?.apply {
                if (isLoading) {
                    state = AsyncLayout.State.LOADING
                    return@Observer
                }
                state = if (success()) AsyncLayout.State.SUCCESS else AsyncLayout.State.ERROR
            }
        }
        observeForever(observer)
        onDestroyView = {
            stateLive.removeObserver(observer)
        }
    }
}

Представление отображает представление об ошибке, загрузке или содержимом в зависимости от полученного состояния.из LiveData в XML я могу использовать его следующим образом:

    <com.common.views.AsyncLayout
        android:id="@+id/asyncLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:stateLiveData="@{vm.someLiveData}">

         //Content view
         <TextView> ...
    <com.common.views.AsyncLayout>

Таким образом, я могу повторно использовать этот макет, в котором уже есть анимация, загрузка и просмотр ошибок, без дублирования кода в действиях или фрагментах.Но у меня есть этот вопрос о наблюдении LiveData по представлению, я думаю, что это безопасно сделать, потому что оно удаляет себя, когда представление уничтожается, однако я могу упустить другие последствия этого.

...