Будет ли RecyclerView обновляться автоматически, когда LiveData изменяется, если я использую BindingAdapter? - PullRequest
0 голосов
/ 29 апреля 2020

Следующий код взят из примеров архитектуры проекта, вы можете увидеть его здесь .

Обычно я наблюдаю viewModel.items и обновляю адаптер точно так же, как код A.

В примерах архитектуры проекта автор использует настроенный @BindingAdapter app:items, я не уверен, будет ли запущен (listView.adapter as TasksAdapter).submitList(items) при изменении val items: LiveData<List<Task>>, не могли бы вы мне сказать?

val items: LiveData<List<Task>> 

tasks_frag. xml

 <androidx.recyclerview.widget.RecyclerView
                        android:id="@+id/tasks_list"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                        app:items="@{viewmodel.items}" />

TasksListBindings.kt

@BindingAdapter("app:items")
fun setItems(listView: RecyclerView, items: List<Task>?) {
    items?.let {
        (listView.adapter as TasksAdapter).submitList(items)
    }
}

TasksFragment.kt

private fun setupListAdapter() {
        val viewModel = viewDataBinding.viewmodel
        if (viewModel != null) {
            listAdapter = TasksAdapter(viewModel)
            viewDataBinding.tasksList.adapter = listAdapter
        } else {
            Timber.w("ViewModel not initialized when attempting to set up adapter.")
        }
    }

Код A

viewModel.items.observe(this, Observer<List<Task>> {
            adapter.submitList(it)
})
...