Comments 4
Зачем может понадобиться принудительное пересозданию вью фрагмента?
Четких правил по тому, что нам нужно использовать attach()
/ detach()
в конкретных кейсах, нет. Эти методы добавлены скорее "на всякий случай"
Из того, что приходит на ум - пользователь может скрыть, но не заменить, фрагмент со сложной иерархией вью
Мы не хотим, чтобы эта иерархия хранилась в памяти, но хотим, чтобы зависимости этого фрагмента не уничтожались, допустим фрагмент работает с чем-то, что долго инициализируется и используется только им
В таком случае кажется логичным уничтожить только вью фрагмента, когда пользователь его не видит, и восстанавливать, когда он снова открыл этот фрагмент
Или, например, такой хак позволяет сменить тему у одного конкретно взятого фрагмента - делаем attach/detach, модифицируем инфлейтор и им инфлейтим вью фрагмента.
Правда, там тоже всё непросто и надо внимательно к этому делу подходит - если в этот момент свернуть/развернуть приложение, можно словить, по-моему, java.lang.IllegalStateException: FragmentManager is already executing transactions, так как под капотом у FragmentManager много разных проверок собственного состояния. И причём воспроизводиться этот баг может не сразу, так как FragmentManager асинхронно обрабатывает транзакции, но в какой-то момент "звёзды сходятся". Так что с этим надо быть поаккуратнее :)
Неочевидное про Fragment API. Часть 1. Транзакции