У меня есть фрагмент, который добавляется программно. Однако я обнаружил, что после вращения создается новый фрагмент, но старый фрагмент все еще жив (хотя и не отображается). Я предположил, что фрагменты уничтожаются вместе с активностью при вращении, но здесь это не так. Что может привести к тому, что мой фрагмент будет сохранен/не уничтожен? Обратите внимание:
- Я не устанавливаю setRetainInstance.
- Фрагмент не добавляется в действие onCreate (добавляется позже при нажатии кнопки)
- Я вижу, что onDestroy вызывается для Activity после ротации.
- Хотя фрагмент добавлен, он закрывает кнопку добавления и увольняется только после выполнения "удаления".
Код, создающий фрагмент:
MyFragment fragment = MyFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.content_frame, fragment, "CurrentFragment");
fragmentTransaction.show(fragment).commit();
Код удаления фрагмента:
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(fragment).commit();
UPDATE: Я не могу подтвердить, была ли эта проблема, но фрагмент регистрируется как приемник LocalBroadcast в onCreate. Он незарегистрирован для трансляций в onDestroy, но кажется, что либо регистрация LocalBroadcast препятствовала вызову onDestroy, либо onDestroy не вызывался при ротации. Теперь я отменил регистрацию в onStop, и это, похоже, решило проблему.