фрагмента? для того чтобы данные сохранялись при перевороте необходимо передавать requireActivity() во viewModelProvider? нормально ли это и не приведет ли к проблемам?
переживает, в этом единственный смысл гугловых вьюмоделей
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.
ну видимо смена конфига — это не goes away permanently
в том то и дело, что с активити норм работает, а в документации написано, что vm фрагмента уничтожается когда он deatached, не пойму как сделать vm для фрагмента
Я не знаю, что ты там за шайтан код написал. Просто инициализируй vm так и все. Val vm by viewModels<Type>()
Я давно не использовал ViewModelProvider. Раньше там вроде, что то на подобие of ещё было
ну короче так делать нельзя? а как тогда?
Вообще и так должно работать вроде
в доке написано что vm фрагмента уничтожается когда он detached...а у активити когда она окончательно finished и эта теория подтверждается когда я пытаюсь перевернуть экран со своей vm
Активити
harmonizr как я понял говорит, что фрагмент
то есть норм если в провайдер передать requireActivity, тогда получается, что жц vm будет привязана к жц fragmentactivity? правильно ли это
ну если это shared viewmodel
У меня все работает вроде
как я понял стандартная vm фрагмента не сохраняет state, только если привязать vm к активити контейнеру фрагмента
кинь лог на onCleared во vm
не вызывается
И я так понял. И что если нужно что-то сохранять, то будьте добры руками.
Как фрагмент создается/добавляется?
supportFragmentManager .beginTransaction() .add(R.id.container, BlankFragment(), "BlankFragment") .addToBackStack(null) .commit()
вот я и не могу понять, если добавлять фрагмент в бекстек то вм не удаляется, а если не добавлять то уничтожается
Колдунство! Наверное, при сохранении в бэкстеке есть смысл хранить вм. А когда фрагмент выкидывается в никуда, то смыла нет.
тогда получается при повороте, если фрагмент есть в бекстеке, то он оттуда же берется и соответственно его vm сохраняется, а если нет, то просто фрагмент пересоздается и vm тоже
А в чем смысл? 🤔
Ну мало ли. Бэкстек не хочется, а вм сохранять нужно 🤷
Обсуждают сегодня