У меня есть LiveData, которая сохраняет состояние. Когда я меняю статус, LiveData не обновляет PagedList (я так думаю).
Это мой код:
class ModuleViewModel(
private val repository: ModuleRepository,
) : ViewModel() {
private val _state = MutableLiveData<ModuleState>().apply { value = ModuleState() }
val state: LiveData<ModuleState>
get() = _state
private fun getEntriesPaged () {
viewModelScope.launch(Dispatchers.IO) {
var label : String? = title
_state.postValue( _state.value?.copy(isLoading = true ) )
val list = repository.getEntriesPaged(lastEntriesType, collection?.idCollection )
if (list != null) {
_state.postValue ( _state.value?.copy(
isLoading = false,
toolbarTitle = label,
entries = list
))
}
}
}
data class ModuleState(
var entries: LiveData<PagedList<Entries>>? = null,
val isLoading: Boolean = false,
val toolbarTitle: String? = null,
val error: String? = null
)
class EntriesFragment(): Fragment(R.layout.fragment_entries) {
...
viewModel.state.observe(requireActivity(), Observer { render(it) })
fun render(state: ModuleState) {
with(state) {
if (entries != null)
adapterPaged.submitList(state.entries!!.value)
if (toolbarTitle != null) {
appViewModel.toolbarTitle.value = toolbarTitle
}
if (error!= null) {
snackbar.setText(error)
snackbar.show()
}
list_news_RecyclerView.scrollToPosition(0)
pullToRefresh.isRefreshing = isLoading
}
}
}
Я не получаю записи но я получаю toolbarTitle, loading. Почему?
Когда я использую преобразование:
val entries2: LiveData<PagedList<Entries>> = Transformations.switchMap(_state) { it -> it.entries }
Работает. Фрагмент показывает записи.
Где проблема?
Спасибо за помощь :)