按下后退按钮时如何使片段替换为特定片段

时间:2018-01-29 15:48:00

标签: java android android-studio fragment back-stack

我有一个包含导航抽屉的应用程序其中一个片段是我希望应用程序的主片段,当后退按钮按下其他一些片段转到主片段时,例如,如果用户按下fr1然后按fr2然后fr3我希望它返回到主页按钮(其中fr1,2,3是导航抽屉的片段,并注意到应用程序中有其他片段我不希望他们回到家中按下按钮)

2 个答案:

答案 0 :(得分:1)

您可以覆盖Activity中的onBackPressed()方法,并将Fragment事务代码放入其中。我不确切知道你的操作,所以下面我写了一个你可以使用的通用例子:

@Override
public void onBackPressed() {
    int count = getFragmentManager().getBackStackEntryCount();
    if (count == 0) {
        super.onBackPressed();
        //additional code
    } else {
        getFragmentManager().popBackStack();
    }
}

答案 1 :(得分:1)

如果你的靠背堆中有多个碎片,你只能通过popBackStack()到达你的家庭碎片,因为它只是反转最后一次操作。例如,你有3个片段(home,fr1,fr2),首先你会到达fr2,然后到家。如果你想直接访问homeBackPress(),你应该用你的家庭片段替换你现有的片段。

    @Override
    public void onBackPressed() {
        int stackCount = getFragmentManager().getBackStackEntryCount();
        if (stackCount == 1) {
            super.onBackPressed(); // if you don't have any fragments in your backstack yet.
        } else {
        // just replace container with fragment as you normally do;

        FragmentManager fm = getFragmentManager();
        fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);//clear backstackfirst and then you can exit the app onbackpressed from home fr
        FragmentTransaction transaction = fm.beginTransaction();
        transaction.replace(R.id.container, new HomeFragment());
        transaction.commit();
        }
    }

编辑: 如何检查当前可见片段

Fragment f = getFragmentManager().findFragmentById(R.id.container);
if (f instanceof HomeFragment) {
//do smth
}