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

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


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

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

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

8 ответов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта