如何在最后一个片段backpress上从最后一个片段重定向到特定片段

时间:2018-07-20 18:54:16

标签: android android-fragments android-activity onbackpressed

我在从Fragment中删除特定的Backstack时遇到问题。

就像,我有五个Fragments A -> B -> C -> D -> E,并且所有Fragments来自同一Activity with add to Backstack的呼叫,并且添加了不使用replace的内容。

Calling order; A -> B -> C -> D -> E

Fragment-E (last fragment)是我当前的Fragment并按下Back Button时,我想去Fragment-B。这意味着我不需要Fragment-C, Fragment-D and Fragment-E

此外,当有Fragment B并按back button时,将调用Fragment A。所有fragment也会同时发生这种情况。

还有一件事情,所有Fragment都调用API以从server获取数据并填充到列表中。

帮助实现此方案。

3 个答案:

答案 0 :(得分:0)

对于instanceof,您有一个称为Fragments的方法。因此,当您进入Fragment E时,请尝试像

在添加操作fragmentTransaction.addToBackStack("fragmentC");

if(currentFragment instanceOf FragmentE) {
    fragmentManager.popBackStack ("fragmentC", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}

答案 1 :(得分:0)

您需要在override onBackPressed()的{​​{1}}中添加Activity。 您可以创建自己的逻辑。例如检查Fragment是否为current fragment,您需要致电instanceof FragmentE三次以删除getFragmentManager().popBackStack();

Fragments C -> D -> E

希望这会有所帮助

答案 2 :(得分:0)

在您的活动中,重写onBackPressed()方法并添加以下代码

@Override
    public void onBackPressed() {
        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
        if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
            if (fragment instanceof FragmentE) {
                     getSupportFragmentManager().popBackStack ("fragmentC", FragmentManager.POP_BACK_STACK_INCLUSIVE);
            } 
        } else {
            super.onBackPressed();
        }
    }

在添加每个片段时,请记住不要忘记在.addToBackStack("whichFragment")之前添加transaction.commit();

.popBackStack ("fragmentC", FragmentManager.POP_BACK_STACK_INCLUSIVE) //this essentially means also remove FragmentC