Во фрагменте с рециклервью идет подписка на изменения в LiveData списке.
При изменении данных, обновленный список передается в адаптер:
mViewModel = ViewModelProvider(this).get(MainFragmentViewModel::class.java)
mViewModel.myData.observe(viewLifecycleOwner, {
it?.let { adapter.setMyData(it) }
})
Все бы хорошо, но событие ожидаемо возникает, даже когда данные не меняются (при пересоздании фрагмента, например, происходит поворот экрана и т.п.) При этом в адаптере каждый раз происходят заново довольно долгие вычисления всяких сложных итогов, которые не хранятся в базе и не приходят через LiveData.
Вопрос: где правильнее такие итоги вычислять и хранить, во вьюмодели, в репозитории, когда обновлять или есть еще какие идеи?
в том то и дело что данных нет, но они есть во вьюмодели и репозиотрии, но в последних нет сложных итогов, они вычисляются в адаптере даже когда сами данные не поменялись.
нельзя ничего в адаптере вычислять
Но подписка на изменение есть только во фрагменте, и непонятно как организовать схему так, чтобы итоги вычислялись только при изменении данных, а не при поворотах экрана.
что за сложные итоги? говори на нашем языке : кодерском
Приехали данные Вычислили Отдали в адаптер Профит! Зачем упорно делать вычисления в адаптере, если они тормозят всё что можно?
А как через ливдату отловить момент когда данные поменялись, если она заточена под жизенный цикл фрагмента?
Лайфдата где объявлена?
Через лайвдату ничего специально не отлавливают. Это канал передачи уведомлений. Есть новые данные - лайвдата сработала. Всё.
Обсуждают сегодня