Раздувать фрагмент только один раз - PullRequest
0 голосов
/ 05 июня 2019

Итак, у меня есть этот код внутри setOnClickListener:

helpFragment = HelpFragment.newInstance()
            supportFragmentManager
                .beginTransaction() // Começar a transição
                .replace(R.id.container, helpFragment)
                .addToBackStack(helpFragment.toString())
                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                .commit() // Aplicar as alterações
}

Но проблема в том, что каждый раз, когда я нажимаю кнопку, создается новый экземпляр фрагмента. При этом, например, если я нажму на кнопку 10 раз, у меня будет 9 фрагментов, добавленных в backstack и 1 видимый. Как я могу создать только один экземпляр фрагмента? Я пробовал:

if (helpFragment == null)

Но это, очевидно, не работает ...

Ответы [ 3 ]

0 голосов
/ 05 июня 2019

Лучше увидеть всю кодовую базу вашей проблемы.Вы можете решить это с помощью Kotlin's lazy.Проверьте эту тему

0 голосов
/ 05 июня 2019

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

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

* 1005 Е.Г. *

val helpFragment = HelpFragment.newInstance()
val isInBackstack = supportFragmentManager.findFragmentByTag(helpFragment.toString())
if (!isInBackstack) {
    supportFragmentManager
        .beginTransaction() // Começar a transição
        .replace(R.id.container, helpFragment)
        .addToBackStack(helpFragment.toString())
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
        .commit() // Aplicar as alterações
}
0 голосов
/ 05 июня 2019

Если вы используете addToBackStack, он всегда будет сохранять фрагменты в backstack. Удалите эту строку, чтобы не добавлять фрагмент в backstack. addToBackStack используется, когда в транзакцию внесено несколько изменений, затем все изменения добавляются в стек, а нажатие кнопки «Назад» восстанавливает эти транзакции одну за другой.

helpFragment = HelpFragment.newInstance()
            supportFragmentManager
                .beginTransaction() // Começar a transição
                .replace(R.id.container, helpFragment)
                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                .commit() // Aplicar as alterações
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...