Java 当按下后退按钮时,如何将片段替换为特定片段

Java 当按下后退按钮时,如何将片段替换为特定片段,java,android,android-studio,fragment,back-stack,Java,Android,Android Studio,Fragment,Back Stack,我有一个包含导航抽屉的应用程序,其中一个片段是主片段,我希望当在一些其他片段中按下后退按钮时,应用程序转到主片段,例如,如果用户按下fr1,然后按下fr2,然后按下fr3,我希望它返回主按钮(其中fr1、2、3是导航抽屉的碎片,请注意,应用程序中还有其他碎片,我不希望它们在按下后退按钮时返回主页)您可以覆盖onBackPressed()方法,并将您的片段事务代码放入其中。我不知道您的具体操作,因此下面我编写了一个通用示例,您可以使用: @Override public void onBackPr

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

您可以覆盖onBackPressed()方法,并将您的片段事务代码放入其中。我不知道您的具体操作,因此下面我编写了一个通用示例,您可以使用:

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

如果您的backstack中有多个片段,则不能仅通过
popBackStack()
访问主片段,因为它只是反转了最后一个操作。例如,如果您有3个片段(home、fr1、fr2),则首先访问fr2,然后再访问home。如果您想在backpress()上直接访问主片段你应该用你的家庭片段替换你现在拥有的

    @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
} 

我的应用程序包含一个导航抽屉,其中包含一个片段,其中一个片段是应用程序的主片段,因此我希望当按下后退按钮时,该片段被主片段替换,请注意,导航抽屉的片段上有指向其他片段的按钮,因此当按下该按钮时,我不会让它返回homeWell,然后您只需将此覆盖方法添加到您的活动中,您的抽屉和碎片将被替换。它不会扰乱您的抽屉导航,因此您可以像现在一样通过按抽屉上的按钮转到任何碎片,但当用户按设备上的后退按钮时,它将立即返回n到主页它只会影响一个活动,而不是整个应用程序。此答案解决了我的问题,但它有一个小问题,如果您在选择主页片段时解决了我的问题,并且我按下了后退按钮,则我会将其标记为可接受。应用程序未关闭如何解决此问题?是的,您需要在转到主页片段之前清除backsta确认,然后你可以退出应用程序,编辑答案,让我知道是否有smth ELSE我已经编辑了问题来详细说明我需要什么请告诉我如何做,并解释代码,以及一切都做了什么