У меня есть действие с NavigationDrawer и фрагментом, который создается, когда я нажимаю на NavigationDrawer. Когда я создаю Фрагмент, я передаю ему несколько аргументов. Когда я поворачиваю экран, воссоздается действие, воссоздается навигационный ящик, а также фрагмент. После этих операций фрагмент воссоздается, но уже без аргументов. Я хочу понять, кто создает Фрагмент во второй раз... Кто-нибудь может мне помочь?
onCreateView вызывается два раза во фрагменте, когда я поворачиваю экран
Ответы (2)
Используйте это в своем манифесте с активностью фрагмента:
android:configChanges="orientation|keyboardHidden|screenSize"
Однако, если ваше приложение нацелено на уровень API 12 или ниже, ваша активность всегда обрабатывает это изменение конфигурации самостоятельно (это изменение конфигурации не перезапускает вашу активность, даже при работе на устройстве Android 3.2 или выше).
Я столкнулся с аналогичной проблемой при попытке восстановить состояние видеоплеера (воспроизведение или пауза) и положение (прошедшее время) после изменения ориентации экрана. Когда я поворачиваю экран один раз, я заметил, что onCreateView в активности фрагмента вызывается дважды. Когда он поворачивается дважды, onCreateView вызывается три раза — и так далее. Последний вызов каким-то образом забывает состояния, которые я сохранил в onSaveInstanceState (в активности фрагмента).
Покопавшись, я нашел ответ, который искал. В действии, которое добавляет фрагмент, мне нужно было проверить, является ли saveInstanceState нулевым. Только если он равен нулю, вы должны добавить фрагмент.
Например:
if (savedInstanceState == null) {
fragmentManager = getSupportFragmentManager();
FragmentActivity fragment = new FragmentActivity();
fragmentManager.beginTransaction()
.add(R.id.fragment_container, fragment)
.commit();
}
Дополнительную информацию можно найти здесь: Жизненный цикл фрагмента Android при изменении ориентации