ViewPager + fragment stack

134
03 апреля 2022, 04:20
  1. Есть активность -> добавляется фрагмент A методом replace
  2. У этого фрагмента A есть view pager -> соответственно два фрагмента добавляются используя child fragment manager
  3. Далее я из фрагмента A перехожу в фрагмент B (добавляю в стек)
  4. В фрагмент B я добавляю дочерний фрагмент (пусть бует C)
  5. У фрагмента C также есть вью пейджер в которых 2 фрагмента - также юзаю child fragment manager.

Проблема: мне нужно из фрагмента C вернуться на A. Когда я это делаю, то фрагмент A инициализируется(все методы жизненого цикла отрабатывают), но не показывается. В чем может быть проблема?

код инициализации адаптера во фрагменте A:

    private fun initViewPager() {
    tabLayout?.setupWithViewPager(viewPager)
    val sectionsPagerAdapter = MyChatsPagerAdapter(
        childFragmentManager,
        context!!,
        arrayOf(MyChatsPagerAdapter.TabItem.CHATS, MyChatsPagerAdapter.TabItem.RECOMMENDATIONS)
    )
    viewPager?.adapter = sectionsPagerAdapter
}

Код перехода из А в Б

     fun showChatScreen(chatId: String, chatName: String) {
    val bundle = Bundle()
    bundle.putString("chatId", chatId)
    bundle.putSerializable("chatName", chatName)
    val mainChatFragment = MainChatFragment()
    mainChatFragment.arguments = bundle
    val ft = fragmentManager?.beginTransaction()
    ft?.replace(R.id.container, mainChatFragment, "chatScreen")?.addToBackStack("chatScreen")
        ?.commit()
}

Код перехода из Б в С

    private fun showChat() {
    val bundle = Bundle()
    bundle.putString("chatId", idChat)
    bundle.putBoolean("fromMap", fromMap)
    bundle.putString("stateChat", stateChat)
    val chatFragment = ChatFragment()
    chatFragment.arguments = bundle
    val ft = childFragmentManager.beginTransaction()
    ft.replace(R.id.mainContainer, chatFragment).commit()
}

Переход из С в А ->

(parentFragment as? MainChatFragment)?.myCustomBack()

где myCustomBack - метод в фрагмента A:

 fun myCustomBack () {
        fragmentManager?.popBackStack()
}
Answer 1

Проблема была в Progress Bar который был в фрагментмене view pager`a фрагмента C Как только я убрал методы видимости этого прогресс бара. Проблемы ушли.

Answer 2

"Проблема" заключается в том, что вы используете replace для навигации по фрагментам. Как следует из названия, он заменяет один фрагмент на другой, в следствие чего фрагменты, которые заменяют, уничтожаются. Чтобы этого не происходило, используете метод add.

READ ALSO
Найти последовательность букв в строке java

Найти последовательность букв в строке java

Задание: нужно проверить, содержится ли в первой строке вторая строка и вывести "Содержится" или "Не содержится"Использовать стандартные...

250
Хочу учиться Android разработке

Хочу учиться Android разработке

Собираюсь делать это через Intellij IDEA (тк

83
Добавление элементов в ChoiceBox

Добавление элементов в ChoiceBox

Как добавить элементы в ChoiceBox в самом fxml файле?

80
Переопределение метода clone для массива

Переопределение метода clone для массива

Вопрос, вот кусок кода, подскажите пожалуйста, как можно сделать что-бы метод clone вызывался и клонировал объект? ) Интересует именно вариант...

212