Что именно происходит, когда вы вызываете setRetainInstance(true)
на Fragment
? Документация практически не существует, и это кажется очень важной функцией. В частности, я хочу знать, сколько из этой последовательности (что я составил) верно:
- Пользователь поворачивает устройство.
- Фрагмент отделяется от
Activity
и вызываетсяFragment.onDetach()
.- Активность уничтожается;
Activity.onDestroy()
.- java-объект
Activity
удаляется (по возможности, с помощью GC).- Создан новый java-объект
Activity
; его конструктор иonCreate()
.- В
Activity.onCreate()
мы либо имеемsetContentView(...)
, который устанавливает макет, содержащий фрагмент, либо мы используемFragmentTransaction
для добавления фрагмента.- Я действительно не уверен в этом, но я предполагаю, что андроид достаточно умен, чтобы найти старый фрагмент, и вызовите
Fragment.onAttach()
в подключите его к новомуActivity
- Далее (или раньше? кто знает?)
Activity.onResume()
вызывается.
Так правильно? Является ли Android достаточно умным, чтобы найти старый фрагмент, даже если я явно использую FragmentTransaction.add(new MyFragment(), ...)
в первый раз? И если да, как мне избежать добавления другого фрагмента в onCreate()
? Нужно ли мне что-то делать?:
if (getSupportFragmentManager().findFragmentByTag("foo") == null)
{
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(new FooFragment(), "foo").commit();
}
Почему в документации нет? Ха нет, просто шучу, не отвечайте на это!