Pull to refresh

Comments 4

Зачем может понадобиться принудительное пересозданию вью фрагмента?

Четких правил по тому, что нам нужно использовать attach()/ detach() в конкретных кейсах, нет. Эти методы добавлены скорее "на всякий случай"
Из того, что приходит на ум - пользователь может скрыть, но не заменить, фрагмент со сложной иерархией вью
Мы не хотим, чтобы эта иерархия хранилась в памяти, но хотим, чтобы зависимости этого фрагмента не уничтожались, допустим фрагмент работает с чем-то, что долго инициализируется и используется только им
В таком случае кажется логичным уничтожить только вью фрагмента, когда пользователь его не видит, и восстанавливать, когда он снова открыл этот фрагмент

Такой кейс рекомендовался с табами или BottomSheet чтобы быстро переключаться между вкладками и не создавать постоянно Fragment

Или, например, такой хак позволяет сменить тему у одного конкретно взятого фрагмента - делаем attach/detach, модифицируем инфлейтор и им инфлейтим вью фрагмента.

Правда, там тоже всё непросто и надо внимательно к этому делу подходит - если в этот момент свернуть/развернуть приложение, можно словить, по-моему, java.lang.IllegalStateException: FragmentManager is already executing transactions, так как под капотом у FragmentManager много разных проверок собственного состояния. И причём воспроизводиться этот баг может не сразу, так как FragmentManager асинхронно обрабатывает транзакции, но в какой-то момент "звёзды сходятся". Так что с этим надо быть поаккуратнее :)

Sign up to leave a comment.