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

How to redirect from last fragment to specific fragment on last fragment backpress

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

比如,我有五个 Fragments A -> B -> C -> D -> E 和所有 Fragments 调用来自同一个 Activity with add to Backstack 并且添加不使用替换。

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 调用 APIserver 中获取数据并填充到列表中。

帮助实现这个场景。

您有一个名为 instanceof 的方法用于 Fragments。因此,当您处于 Fragment E 时,请尝试检查

同时添加 fragmentTransaction.addToBackStack("fragmentC");

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

您需要 override onBackPressed() 在您的 Activity 中,从您添加的地方 Fragment。 您可以创建自己的逻辑。比如检查 current fragment 是否为 instanceof FragmentE 您需要调用 getFragmentManager().popBackStack(); 三次才能删除 Fragments C -> D -> E

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() > 0) {

        if(getFragmentManager().findFragmentById(R.id.ad_container) instanceof FragmentE) {
            getFragmentManager().popBackStack();
            getFragmentManager().popBackStack();
            getFragmentManager().popBackStack();
            // pop fragment D,C from backstack
            // navigate to fragment B
        }

    } else {
        super.onBackPressed();
    }
}

希望对您有所帮助

在你 activity 覆盖 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();
        }
    }

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

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