查找上一个活动片段

问题描述 投票:0回答:3

我有4个片段。以下是导航流程

[片段1] - > [片段2] - > [片段3]

[片段4] - > [片段3]

如果用户在[片段3]的背面按4从片段3(即[片段4] - > [片段3])进入片段3,它应该转到[片段1]。

我想如果我能够找到之前的片段那么将很容易重定向到[fragment 1]。有什么方法可以找到已被替换的先前片段是什么?

我尝试过fragmentManager.getBackStackEntryAt(fragmentManager.backStackEntryCount - 1),但只显示当前片段的一个条目。

片段管理器看起来像这样。

FragmentManager Object

onBackPressedFragment 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()
}
android android-fragments fragmentmanager
3个回答
0
投票

我已经发布了这个问题并在那里提供答案请尝试搜索

资源 :

Link

override fun onBackPressed() {
    if (tabLayout.selectedTabPosition != 0) {
        tabLayout.getTabAt(0)?.select()
    } else {
        super.onBackPressed()
    }
}

0
投票

我解决了这个问题。我没有将片段添加到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()
}

0
投票

你可以这样的用户监听器,

supportFragmentManager.addOnBackStackChangedListener {
    val fragment = supportFragmentManager.findFragmentById(R.id.container)
    //Write your logic here
}
© www.soinside.com 2019 - 2024. All rights reserved.