简体   繁体   English

当我们只有片段时处理`BackPressed`

[英]Handle `BackPressed` when we only have a fragment

I have an Activity and it has only one Fragment . 我有一个Activity ,它只有一个Fragment I want to handle backpressed functionality. 我想处理backpressed功能。 When user presses back, program should go back to Activity . 当用户按下时,程序应返回到Activity I know this is very simple but I have tried some solutions that are mentioned on Stackoverflow, but none of them worked. 我知道这很简单,但是我尝试了Stackoverflow上提到的一些解决方案,但是没有一个起作用。 For example I tried this: 例如,我尝试了这个:

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

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

        getFragmentManager().popBackStack();
    }
}

Your code seems to be correct. 您的代码似乎是正确的。 Did you add Fragment to backstack using addToBackStack ? 您是否使用addToBackStackFragment添加到addToBackStack Have a look at this question . 看看这个问题 It's similar to yours. 与您的相似。

As I understand all you want to do is when users press Back key on MainActivity 据我了解,您要做的就是用户在MainActivity上按Back键

  • If there are more than 1 fragments in the back stack just pop out the fragment 如果后堆栈中有超过1个片段,则弹出片段
  • If there is only 1 fragment in the back stack, first back press will be ignored and you would like to run some additional code. 如果后退堆栈中只有1个片段,则第一次后退操作将被忽略,您想运行一些其他代码。 Then if users press back key again, your MainActivity will be finished. 然后,如果用户再次按返回键,您的MainActivity将完成。

Change your code to 将您的代码更改为

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()
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM