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

Правильно ли я понимаю, что viewmodel не переживает смену конфигурации

фрагмента? для того чтобы данные сохранялись при перевороте необходимо передавать requireActivity() во viewModelProvider? нормально ли это и не приведет ли к проблемам?

27 ответов

33 просмотра

переживает, в этом единственный смысл гугловых вьюмоделей

</кипарис>- Автор вопроса

ViewModel objects are scoped to the Lifecycle passed to the ViewModelProvider when getting the ViewModel. The ViewModel remains in memory until the Lifecycle it's scoped to goes away permanently: in the case of an activity, when it finishes, while in the case of a fragment, when it's detached.

</кипарис>
ViewModel objects are scoped to the Lifecycle pass...

ну видимо смена конфига — это не goes away permanently

</кипарис>- Автор вопроса
Mike (деньги не клянчу)
ну видимо смена конфига — это не goes away permane...

в том то и дело, что с активити норм работает, а в документации написано, что vm фрагмента уничтожается когда он deatached, не пойму как сделать vm для фрагмента

Я не знаю, что ты там за шайтан код написал. Просто инициализируй vm так и все. Val vm by viewModels<Type>()

Я давно не использовал ViewModelProvider. Раньше там вроде, что то на подобие of ещё было

</кипарис>- Автор вопроса
</кипарис>- Автор вопроса
Nikita Senatorov
Вообще и так должно работать вроде

в доке написано что vm фрагмента уничтожается когда он detached...а у активити когда она окончательно finished и эта теория подтверждается когда я пытаюсь перевернуть экран со своей vm

Активити

</кипарис>- Автор вопроса
Leonid B.
Активити

harmonizr как я понял говорит, что фрагмент

</кипарис>- Автор вопроса

то есть норм если в провайдер передать requireActivity, тогда получается, что жц vm будет привязана к жц fragmentactivity? правильно ли это

У меня все работает вроде

</кипарис>- Автор вопроса

как я понял стандартная vm фрагмента не сохраняет state, только если привязать vm к активити контейнеру фрагмента

</кипарис>- Автор вопроса
</кипарис>
как я понял стандартная vm фрагмента не сохраняет ...

И я так понял. И что если нужно что-то сохранять, то будьте добры руками.

Алексей Соловьев
не вызывается

Как фрагмент создается/добавляется?

Leonid B.
Как фрагмент создается/добавляется?

supportFragmentManager .beginTransaction() .add(R.id.container, BlankFragment(), "BlankFragment") .addToBackStack(null) .commit()

</кипарис>- Автор вопроса

вот я и не могу понять, если добавлять фрагмент в бекстек то вм не удаляется, а если не добавлять то уничтожается

</кипарис>
вот я и не могу понять, если добавлять фрагмент в ...

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

</кипарис>- Автор вопроса
Leonid B.
Колдунство! Наверное, при сохранении в бэкстеке ес...

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

А в чем смысл? 🤔

Алексей Соловьев
А в чем смысл? 🤔

Ну мало ли. Бэкстек не хочется, а вм сохранять нужно 🤷

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта