Зачем использовать фрагмент#setRetainInstance (boolean)?



Я нахожу фрагмент#setRetainInstance (true) запутанным. Вот Javadoc, извлеченный из Android Developer API:




общественная недействительным setRetainInstance (логическое сохранить)



определяет, сохраняется ли экземпляр фрагмента при повторном создании действия (например, при изменении конфигурации). Это может быть использовано только с фрагментами не в заднем стеке. Если задано, жизненный цикл фрагмента будет немного отличаться, когда активность воссоздается:




  • onDestroy () не будет вызываться (но onDetach () все равно будет, потому что фрагмент отделяется от его текущей активности).

  • onCreate (Bundle) не будет вызван, так как фрагмент не создается повторно.

  • onAttach (Activity) и onActivityCreated(Bundle)будет еще можно назвать.




вопрос: Как вы, как разработчик, используете это и почему это делает вещи проще?

578   3  

3 ответов:

как вы, как разработчик, используете это

вызов setRetainInstance(true). Я обычно делаю это в onCreateView() или onActivityCreated(), где я использую его.

и почему это делает вещи проще?

это, как правило, проще, чем onRetainNonConfigurationInstance() для обработки хранения данных при изменении конфигурации (например, при повороте устройства с книжной на альбомную ориентацию). Несохраненные фрагменты уничтожаются и воссоздаются при изменении конфигурации; сохраняются фрагментов нет. Следовательно, любые данные, хранящиеся в этих сохраненных фрагментах, доступны для действия после изменения конфигурации.

Это очень полезно в сохранении долго работающих ресурсов открытых, таких как сокеты. У вас есть фрагмент без пользовательского интерфейса, который содержит ссылки на разъемы bluetooth, и вам не придется беспокоиться о их повторном подключении, когда пользователь переворачивает телефон.

Это также удобно в хранении ссылок на ресурсы, которые занимают много времени для загрузки, как растровые изображения или данных сервера. Загрузите его один раз, сохраните его в сохраненном фрагменте, и когда действие будет перезагружено, оно все еще там, и вам не нужно перестраивать оно.

добавил этот ответ очень поздно, но я думал, что так будет понятнее. Скажи после меня. Когда setRetainInstance:

ложные

  • фрагмент повторно создается при изменении конфигурации. Создается новый экземпляр.
  • все методы жизненного цикла вызываются при изменении конфигурации, включая onCreate () и onDestroy ().

правда

  • фрагмент не создается повторно при изменении конфигурации. ТОТ ЖЕ Используется экземпляр.
  • все методы жизненного цикла вызываются при изменении конфигурации, кроме onCreate () и onDestroy ().
  • сохранение экземпляра не будет работать при добавлении в backstack.

Не забывайте, что вышесказанное относится как к диалоговым фрагментам, так и к фрагментам.

Comments

    Ничего не найдено.