Android 当我们只有一个片段时,句柄“BackPressed”

Android 当我们只有一个片段时,句柄“BackPressed”,android,android-fragments,onbackpressed,Android,Android Fragments,Onbackpressed,我有一个活动,它只有一个片段。我想处理反压功能。当用户按back键时,程序应返回到活动。我知道这很简单,但我尝试过Stackoverflow上提到的一些解决方案,但都不起作用。例如,我尝试了以下方法: public void onBackPressed() { int count = getFragmentManager().getBackStackEntryCount(); if (count == 0) { super.onBackPressed();

我有一个
活动
,它只有一个
片段
。我想处理
反压
功能。当用户按back键时,程序应返回到
活动
。我知道这很简单,但我尝试过Stackoverflow上提到的一些解决方案,但都不起作用。例如,我尝试了以下方法:

public void onBackPressed() {
int count = getFragmentManager().getBackStackEntryCount();

    if (count == 0) {
        super.onBackPressed();
        //additional code
    } else {

        getFragmentManager().popBackStack();
    }
}

您的代码似乎是正确的。您是否使用
addToBackStack
Fragment
添加到backstack?看看这个。它与您的代码类似。

您的代码似乎是正确的。您是否使用
addToBackStack
Fragment
添加到backstack?看看这个。它与您的类似。

据我所知,您所要做的就是当用户按下
main活动上的后退键时。

  • 如果后堆栈中有超过1个片段,只需弹出片段即可
  • 如果后堆栈中只有1个片段,那么将忽略第一次后按,并且您希望运行一些额外的代码。然后,如果用户再次按后退键,您的
    main活动将完成
将代码更改为

private boolean ignoredFirstBackPressed = false;

@Override
public void onBackPressed() {
    int count = getFragmentManager().getBackStackEntryCount();
    if (count == 1) {
        // If there is only one fragment in back stack
        if (!ignoredFirstBackPressed) {
            // additional code
            ignoredFirstBackPressed = true;
        } else {
            finish();
        }
    } else {
        getFragmentManager().popBackStack(); // or super.onBackPressed()
    }
}

据我所知,当用户在
MainActivity

  • 如果后堆栈中有超过1个片段,只需弹出片段即可
  • 如果后堆栈中只有1个片段,那么将忽略第一次后按,并且您希望运行一些额外的代码。然后,如果用户再次按后退键,您的
    main活动将完成
将代码更改为

private boolean ignoredFirstBackPressed = false;

@Override
public void onBackPressed() {
    int count = getFragmentManager().getBackStackEntryCount();
    if (count == 1) {
        // If there is only one fragment in back stack
        if (!ignoredFirstBackPressed) {
            // additional code
            ignoredFirstBackPressed = true;
        } else {
            finish();
        }
    } else {
        getFragmentManager().popBackStack(); // or super.onBackPressed()
    }
}

我不明白你的意思point@IntelliJAmiya我尝试了你们的解决方案,但当我按下“后退”键时,程序就退出了。你们说只有一个片段,但你们正在检查“后退”中是否还有另一个片段,对吗?我不明白你们的意思point@IntelliJAmiya我试过你的解决方案,但当我按下返回键时,程序就退出了。你说只有一个片段,但您正在检查backStack中是否有另一个片段,是否正确?我将片段添加到
addToBackStack
并返回到我的活动。但我的应用程序显示空白活动!你能展示一下你是如何创建和添加片段的吗?可能是您正在使用
SupportFragmentManager
添加片段,而
FragmentManager
正在返回计数0。我将片段添加到
addToBackStack
并返回到我的活动。但我的应用程序显示空白活动!你能展示一下你是如何创建和添加片段的吗?可能是您正在使用
SupportFragmentManager
添加片段,并且
FragmentManager
返回计数0。