Я попытался решить эту проблему, обыскав через Интернет, никакого реального ответа не найдено.
Я разрабатываю приложение, в котором нужен плеер YouTube. Этот игрок является YouTubePlayerSupportFragment
, поскольку он находится в фрагменте поддержки (поэтому он также вложен). После первоначальной настройки я понял, что всякий раз, когда я поворачиваю телефон, видео перестает играть, и его нужно снова перезапустить. Это, очевидно, не то, что я хочу.
Затем я нашел несколько ответов SO (как это), где люди говорят, что Activity необходимо обрабатывать изменения конфигурации, поэтому я добавил android:configChanges="keyboardHidden|orientation|screenSize"
в Activity in манифест. Это решило проблему, теперь видео продолжает играть даже при изменении ориентации, и полноэкранное вращение не выглядит уродливым. Прохладный, я сказал, только чтобы понять, что это перепутало большое время с другими частями приложения, потому что конфигурация теперь обновляется после того, как все взгляды на месте. Это означает, что если мой телефон был в портретном режиме, и я повернул его к пейзажу, используемая компоновка по-прежнему будет портретной.
Я нашел решения для этого, предлагая вызов setContentView(...)
в Activity onConfigurationChanged(...)
и повторное включение представления в Фрагменты, но это кажется довольно громоздким, если не страшным решением, поскольку это не просто простая настройка содержимого, в которой я нуждаюсь, фрагменты необходимо сохранить (например, положение прокрутки в RecyclerView
). Встроенный setRetainInstance(true)
не работает в этом случае, поскольку представление также будет воссоздано с этим, но конфигурация по-прежнему остается старой при вызове onCreateView(...)
.
Было бы неплохо, если бы я мог поймать события configChanges
, если пользователь только на этом экране (фрагменте), но сохранит активность в другом месте.
Не предлагайте использовать больше действий, я не могу использовать отдельное действие для этого экрана и остальное приложение из-за причин UI/UX.