169 похожих чатов

Товарищи, вот как бы вы подсказали новичку решить следующий вопрос:


Во фрагменте с рециклервью идет подписка на изменения в LiveData списке.
При изменении данных, обновленный список передается в адаптер:

mViewModel = ViewModelProvider(this).get(MainFragmentViewModel::class.java)
mViewModel.myData.observe(viewLifecycleOwner, {
it?.let { adapter.setMyData(it) }
})

Все бы хорошо, но событие ожидаемо возникает, даже когда данные не меняются (при пересоздании фрагмента, например, происходит поворот экрана и т.п.) При этом в адаптере каждый раз происходят заново довольно долгие вычисления всяких сложных итогов, которые не хранятся в базе и не приходят через LiveData.
Вопрос: где правильнее такие итоги вычислять и хранить, во вьюмодели, в репозитории, когда обновлять или есть еще какие идеи?

8 ответов

6 просмотров
Pavel-Vasilev Автор вопроса

в том то и дело что данных нет, но они есть во вьюмодели и репозиотрии, но в последних нет сложных итогов, они вычисляются в адаптере даже когда сами данные не поменялись.

Pavel-Vasilev Автор вопроса
Ilya
нельзя ничего в адаптере вычислять

Но подписка на изменение есть только во фрагменте, и непонятно как организовать схему так, чтобы итоги вычислялись только при изменении данных, а не при поворотах экрана.

Pavel Vasilev
в том то и дело что данных нет, но они есть во вью...

что за сложные итоги? говори на нашем языке : кодерском

Pavel Vasilev
Но подписка на изменение есть только во фрагменте,...

Приехали данные Вычислили Отдали в адаптер Профит! Зачем упорно делать вычисления в адаптере, если они тормозят всё что можно?

Pavel-Vasilev Автор вопроса

А как через ливдату отловить момент когда данные поменялись, если она заточена под жизенный цикл фрагмента?

Pavel Vasilev
А как через ливдату отловить момент когда данные п...

Через лайвдату ничего специально не отлавливают. Это канал передачи уведомлений. Есть новые данные - лайвдата сработала. Всё.

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Вопрос тем кто смотрит видео и слушает подкасты - как вы потом ищете нужную вам информацию? Вот статью я прочитал, потом могу искать нужную мне часть банальным поиском. Пропус...
Aleksandr Druzhinin
4
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
@FAssembler ты много с формами работал, как цикл обработки сообщений от окошек надо делать, чтобы IsDialogMessage не ломал ввод в эдиты и навигация по табам работала?
The Bird of Hermes
8
Карта сайта