Как стать автором
Обновить

Комментарии 8

Спасибо. А нет в запасе подобного разбора но в случае с ViewModelProviders.of(f: Fragment)? Сейчас посмотрел мельком — логика там какая то более запутанная и с наскока лично я ее не осилил, нужно будет отдельно поразбираться.
Не, думал о фрагментах написать, но на самом деле логика там абсолютно та же.
Надо значит перечитать сорцы, что то первая, быстрая попытка разобраться, не взлетела.
Из минусов — не работает до 4 андроида, там придется по старинке через retain фрагмент.

getLastNonConfigurationInstance доступен с первой версии API

Верно, но есть нюанс — в документации есть такое:
If you are targeting Build.VERSION_CODES.HONEYCOMB or later, consider instead using a Fragment with Fragment.setRetainInstance(boolean)

И такое:
This function is called purely as an optimization, and you must not rely on it being called.
Ну тут они советуют использовать родные ретейн фрагменты, которые появились начиная с HONEYCOMB (версия 3.0-3.2). Но если посмотреть исходники внимательно, то можно увидеть, что родные и саппорт фрагменты хранятся и передаются через NonConfigurationInstances, аналогично и лоадеры.
А вот второе замечание интересное, что onRetainNonConfigurationInstance может в каки-то случаях не вызваться. Но что-то мне подсказывает на практике это никогда не случается. Иначе на ретейн фрагменты тоже нельзя полагаться.
Это они так пушили использовать фрагменты, так как они появились в 3 версии Android. Подобный ход они делают и сейчас, говоря что бы использовали ViewModel.
Спасибо за статью. Очень вовремя, потому что собирался искать почему MVVM от Google не такое золотое решение. А тут старый хороший ритейн задействован. Теперь задача сделать это удобное для использования без допольнительной библиотеки, поскольку LiveData это простой BehaviorSubject из Rx.
И все же присоединяюсь к комментарью о Фрагментах. Каким именно способом можно это сделать там? Ведь создание мостов с Фрагментами которые будут отвечать за получение ViewModel из Фрагментов не очень удобно.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории