当我们只有一个片段时处理 BackPressed
Handle `BackPressed` when we only have a fragment
我有一个 Activity
而它只有一个 Fragment
。我想处理 backpressed
功能。当用户按下返回时,程序应该返回到 Activity
。我知道这很简单,但我尝试了 Whosebug 上提到的一些解决方案,但其中 none 有效。例如我试过这个:
public void onBackPressed() {
int count = getFragmentManager().getBackStackEntryCount();
if (count == 0) {
super.onBackPressed();
//additional code
} else {
getFragmentManager().popBackStack();
}
}
您的代码似乎是正确的。您是否使用 addToBackStack
添加 Fragment
到 backstack?看看这个 question。和你的很像。
据我了解,您要做的就是当用户在 MainActivity
上按返回键时
- 如果返回堆栈中有超过 1 个片段,则弹出片段
- 如果后退堆栈中只有 1 个片段,第一次后退键将被忽略,您需要 运行 一些额外的代码。然后,如果用户再次按返回键,您的
MainActivity
将完成。
将您的代码更改为
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()
}
}
我有一个 Activity
而它只有一个 Fragment
。我想处理 backpressed
功能。当用户按下返回时,程序应该返回到 Activity
。我知道这很简单,但我尝试了 Whosebug 上提到的一些解决方案,但其中 none 有效。例如我试过这个:
public void onBackPressed() {
int count = getFragmentManager().getBackStackEntryCount();
if (count == 0) {
super.onBackPressed();
//additional code
} else {
getFragmentManager().popBackStack();
}
}
您的代码似乎是正确的。您是否使用 addToBackStack
添加 Fragment
到 backstack?看看这个 question。和你的很像。
据我了解,您要做的就是当用户在 MainActivity
- 如果返回堆栈中有超过 1 个片段,则弹出片段
- 如果后退堆栈中只有 1 个片段,第一次后退键将被忽略,您需要 运行 一些额外的代码。然后,如果用户再次按返回键,您的
MainActivity
将完成。
将您的代码更改为
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()
}
}