Не могу показать уже добавленный фрагмент - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь сделать следующее:

  1. Запустить приложение - Фрагмент A загружает
  2. Нажмите кнопку A - Фрагмент B загрузит
  3. Нажмите кнопку наB - Фрагмент A загружает

Этот метод в MainActivity:

private fun addBrowseBooksFragment() {

        var browseBooksFragment = BrowseBooksFragment()
        val fragmentManager = fragmentManager
        val fragmentTransaction = fragmentManager.beginTransaction()

        if ((fragmentManager.findFragmentByTag("BrowseBooksFragment")) != null){
            browseBooksFragment = fragmentManager.findFragmentByTag("BrowseBooksFragment") as BrowseBooksFragment

            println("working fine up to here")

            if (browseBooksFragment.isAdded) {
                println("Showing Added Fragment")
                browseBooksFragment.setCallBackInterface(this)
                fragmentTransaction.show(browseBooksFragment)
            }

        } else {
            browseBooksFragment.setCallBackInterface(this)
            fragmentTransaction.replace(R.id.fragmentContainer, browseBooksFragment, "BrowseBooksFragment")
        }
        fragmentTransaction.commit()
    }

else работает нормально, поскольку фрагмент A загружается без проблем.Фрагмент Б также загружается без проблем.Но когда я нажимаю кнопку, чтобы вернуться к фрагменту A, browseBooksFragment.isAdded возвращает значение false, но browseBooksFragment не равно нулю.Он возвращает фрагмент по тегу.

Я пытаюсь избежать воссоздания всего фрагмента, не используя replace, а вместо этого использую show.

. Я должен добавить, что если я закомментируюусловие isAdded и изменение show на replace, я получаю уже добавленный фрагмент исключение.

//            if (browseBooksFragment.isAdded) {
                println("Showing Added Fragment")
                browseBooksFragment.setCallBackInterface(this)
                fragmentTransaction.replace(R.id.fragmentContainer, browseBooksFragment, "BrowseBooksFragment")
//                fragmentTransaction.show(browseBooksFragment)
//            }

Как правильно отобразить уже добавленный фрагмент A?

1 Ответ

0 голосов
/ 08 июня 2018

Вместо replace(), вы должны использовать add().Таким образом, вы не заменяете существующий фрагмент, а вместо этого нажимаете фрагмент B поверх фрагмента A.

Например:

FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
   .add("id of your fragment container", fragment, fragment.class.getSimpleName())
   .addToBackStack(fragment.class.getSimpleName())
   .commit();

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

fm.popBackStack();

И это вытолкнет фрагмент B из BackStack, показывая ранее созданный фрагмент A.

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