onCreateView вызывается два раза во фрагменте, когда я поворачиваю экран

У меня есть действие с NavigationDrawer и фрагментом, который создается, когда я нажимаю на NavigationDrawer. Когда я создаю Фрагмент, я передаю ему несколько аргументов. Когда я поворачиваю экран, воссоздается действие, воссоздается навигационный ящик, а также фрагмент. После этих операций фрагмент воссоздается, но уже без аргументов. Я хочу понять, кто создает Фрагмент во второй раз... Кто-нибудь может мне помочь?


person fran    schedule 31.12.2013    source источник
comment
прекратите перезагрузку активности, установив android:configChanges=keyboardHidden|orientation|screenSize в файле mainfest   -  person Biraj Zalavadia    schedule 31.12.2013


Ответы (2)


Используйте это в своем манифесте с активностью фрагмента:

      android:configChanges="orientation|keyboardHidden|screenSize"

Однако, если ваше приложение нацелено на уровень API 12 или ниже, ваша активность всегда обрабатывает это изменение конфигурации самостоятельно (это изменение конфигурации не перезапускает вашу активность, даже при работе на устройстве Android 3.2 или выше).

person Hulk    schedule 31.12.2013
comment
Это просто предотвращает загрузку из ресурсов, зависящих от ориентации. Будет загружаться из того, что инициализировалось при запуске - person Farid; 16.08.2019

Я столкнулся с аналогичной проблемой при попытке восстановить состояние видеоплеера (воспроизведение или пауза) и положение (прошедшее время) после изменения ориентации экрана. Когда я поворачиваю экран один раз, я заметил, что onCreateView в активности фрагмента вызывается дважды. Когда он поворачивается дважды, onCreateView вызывается три раза — и так далее. Последний вызов каким-то образом забывает состояния, которые я сохранил в onSaveInstanceState (в активности фрагмента).

Покопавшись, я нашел ответ, который искал. В действии, которое добавляет фрагмент, мне нужно было проверить, является ли saveInstanceState нулевым. Только если он равен нулю, вы должны добавить фрагмент.

Например:

if (savedInstanceState == null) {
    fragmentManager = getSupportFragmentManager();

    FragmentActivity fragment = new FragmentActivity();

    fragmentManager.beginTransaction()
         .add(R.id.fragment_container, fragment)
         .commit();
}

Дополнительную информацию можно найти здесь: Жизненный цикл фрагмента Android при изменении ориентации

person Joshua    schedule 03.08.2018