Найти предыдущий активный фрагмент - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть 4 фрагмента.Ниже приводится навигационный поток

[Фрагмент 1] -> [Фрагмент 2] -> [Фрагмент 3]

[Фрагмент 4] -> [Фрагмент 3]

Если пользователь переходит к фрагменту 3 из 4 (то есть [Фрагмент 4] -> [Фрагмент 3]) при последующем нажатии [Фрагмент 3], он должен перейти к [Фрагмент 1].

Iподумайте, если мне удастся найти предыдущий фрагмент, тогда будет легко перенаправить на [fragment 1].Могу ли я найти какой-нибудь предыдущий фрагмент, который был заменен?

Я пробовал фрагментManager.getBackStackEntryAt (фрагментManager.backStackEntryCount - 1), но показывает только одну запись текущего фрагмента.

Менеджер фрагментов выглядит следующим образом.

Объект FragmentManager

onBackPressed из Fragment 3 Это я сделал что-то вроде этого.

override fun onBackPressed(): Boolean {
    args.host.hideKeyboard()

    if (redirectToProductList) {
        args.host.activity?.let {
            if (it.supportFragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)) {
                openFirstFragment(it, SupportFragment(MainActivity.SalesRepProduct))
                return true
            }
        }
    }
    return args.host.childFragmentManager.popBackStackImmediate()
}

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Вы можете прослушивать как пользователь,

supportFragmentManager.addOnBackStackChangedListener {
    val fragment = supportFragmentManager.findFragmentById(R.id.container)
    //Write your logic here
}
0 голосов
/ 28 декабря 2018

Я решил проблему.Я не добавлял фрагмент в backstack.

fragmentManager.beginTransaction()
            .addToBackStack(newFragment.javaClass.name)
            .commit()

Затем я нашел предыдущий фрагмент, подобный этому.

override fun onBackPressed(): Boolean {
    args.host.hideKeyboard()
    val index = args.host.fragmentManager.backStackEntryCount - 2
    if (index >= 0) {
        val prevFrag = args.host.fragmentManager.getBackStackEntryAt(index)
        if (prevFrag.name == SearchContainerPresenter::class.java.name)
            args.host.activity?.let {
                if (it.supportFragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)) {
                    openFirstFragment(it, SupportFragment(MainActivity.SalesRepProduct))
                    return true
                }
            }
        else
            return args.host.childFragmentManager.popBackStackImmediate()
    }
    return args.host.childFragmentManager.popBackStackImmediate()
}
...