Управление фрагментами на платформе Android - PullRequest
0 голосов
/ 18 ноября 2018

Я создаю новый проект Android, и в скором времени будут запущены складные устройства Android.У меня есть активность, фрагмент которой называется первый фрагмент.Первый фрагмент имеет кнопку, называемую первой кнопкой, которая открывает второй фрагмент, который имеет кнопку, называемую второй, и при нажатии второй открывается третий фрагмент.

Предположим, пользователь находится в третьем фрагменте, и пользователь решает развернуть свое устройство, еслипользователь вернется к фрагменту один или он останется во фрагменте три.Насколько я понял из саммита разработчиков, действие будет уничтожено и воссоздано, когда пользователь развернет свое устройство, поэтому технически пользователь возвращается к первому фрагменту, что приводит к ухудшению взаимодействия с пользователем.

Поэтому мой вопрос заключается в том, должен ли я рассмотретьдаже используя фрагменты ?, Если да, как управлять состоянием, чтобы пользователь переходил к тому же фрагменту, который был у него, когда он складывает или разворачивает свое устройство.

Ниже приведен мой код, если я изменяю фрагменты

private fun displayView(fragment: Fragment?, title: String) {
        if (fragment != null) {
            supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
            supportFragmentManager.beginTransaction()
                    .replace(R.id.framelayout_activity_main, fragment, title).commit()
        }
    }

1 Ответ

0 голосов
/ 18 ноября 2018

В onCreate() вы хотите выполнить FragmentTransaction, только если это действие создается заново, а не воссоздано после изменения конфигурации.Или, точнее, вы хотите выполнить FragmentTransaction, только если у вас еще нет фрагментов в том состоянии, в котором вы их хотите.

Таким образом, типичный подход состоит в том, чтобы посмотреть, есть ли у вас фрагмент вваш контейнер:

override fun onCreate(state: Bundle) {
  super.onCreate(state)

  if (supportFragmentManager.findFragmentById(R.id.framelayout_activity_main) == null) {
    // do something to show your fragment
  }

  // other good stuff goes here
}

При первом вызове onCreate(), findFragmentById() вернет null, поэтому вы выполняете свой код для отображения вашего первого фрагмента.При последующем вызове onCreate() после изменения конфигурации Android уже настроит ваши фрагменты для вас к моменту вызова onCreate().Таким образом, в этом случае findFragmentById() вернет что-то отличное от null, так что вы знаете, что у вас уже есть фрагмент в вашем контейнере и вам больше ничего не нужно делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...