Обрабатывать `BackPressed`, когда у нас есть только фрагмент - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть Activity, и у него есть только один Fragment. Я хочу обработать backpressed функциональность. Когда пользователь нажимает назад, программа должна вернуться к Activity. Я знаю, что это очень просто, но я пробовал некоторые решения, которые упоминаются в Stackoverflow, но ни одно из них не сработало. Например я попробовал это:

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

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

        getFragmentManager().popBackStack();
    }
}

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Как я понимаю, все, что вы хотите сделать, - это когда пользователи нажимают клавишу Back на 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()
    }
}
0 голосов
/ 16 сентября 2018

Ваш код кажется правильным.Вы добавили Fragment в backstack, используя addToBackStack?Посмотрите на этот вопрос .Это похоже на ваше.

...