@genbachae

Как правильно работать с LiveData на Kotlin?

Есть код на Java в котором осуществляется подписка на LiveData и там функция "onChanged" вызывается без проблем:
5e01b1a3a8c57686220056.png

А вот код делающий тоже самое на Kotlin, но функция "onChanged" никак не хочет вызываться:
5e01b1c375722744281618.png

Подскажите пожалуйста где ошибка?

Проект на Java: Ссылка1
Ссылка2

Проект на Kotlin: Ссылка1
Ссылка2
  • Вопрос задан
  • 258 просмотров
Решения вопроса 1
fursa08
@fursa08
Junior Android developer
уберите вот эту строчку инициализации ListView из метода onChanged. Метод нужен только для обновления данных. Я у себя вот так делаю

viewModel.getItems().observe(this, Observer { collections ->
            galleryRecycler.visibility = View.VISIBLE
            progressBarGallery.visibility = View.GONE
            galleryAdapter.setItems(collections.mapToGalleryItem())
        })
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@genbachae Автор вопроса
Спасибо большое! Заменил кусок кода:

RecsLiveData.observe(this, Observer<List<Rec>>() {
            fun onChanged(@Nullable Recs: List<Rec>) {
                val lvMain: ListView = findViewById(R.id.lvMain) as ListView // создаем адаптер
                recAdapter = RecAdapter(this@MainActivity, Recs)
                lvMain.setAdapter(recAdapter) // присваиваем адаптер списку
            }


на код:

RecsLiveData.observe(this, Observer<List<Rec>>() {
            val lvMain: ListView = findViewById(R.id.lvMain) as ListView    // создаем адаптер
            recAdapter = RecAdapter(this@MainActivity, it)
            lvMain.setAdapter(recAdapter)                                   // присваиваем адаптер списку
        })


и всё заработало!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы