Следующий код взят из примеров архитектуры проекта, вы можете увидеть его здесь .
Обычно я наблюдаю 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)
})