Как всегда вернуться к одной и той же активности на кнопке «Назад»? - PullRequest
1 голос
/ 06 января 2020

У меня есть основной вид деятельности с меню. Пункты меню ведут к другим действиям. Я пытаюсь реализовать его так, чтобы при запуске нового действия из меню после нажатия кнопки «Назад» приложение возвращалось к основному действию независимо от того, сколько других действий было ранее открыто.

Я пытался используйте флаг CLEAR_TOP, но это не поможет.

menuItem.setOnClickListener(v -> {
        Intent i = new Intent(AppMenuActivity.this, SomeActivity.class);
        overridePendingTransition(0, 0);
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(i);
        resideMenu.closeMenu();
    });

1 Ответ

2 голосов
/ 07 января 2020

С FLAG_ACTIVITY_CLEAR_TOP android документация:

FLAG_ACTIVITY_CLEAR_TOP

public static final int FLAG_ACTIVITY_CLEAR_TOP

Если он объявил, что его режим запуска будет «несколько» (по умолчанию), и вы не установили FLAG_ACTIVITY_SINGLE_TOP в том же самом намерении, тогда оно будет закончено и воссоздано; для всех других режимов запуска или если установлен FLAG_ACTIVITY_SINGLE_TOP, то это намерение будет доставлено в onNewIntent () текущего экземпляра.

Что это значит?

  • Если режим запуска вашей деятельности «несколько / стандарт / по умолчанию» И вы не установите FLAG_ACTIVITY_SINGLE_TOP в том же намерении, то оно будет завершено и воссоздано.
  • Если режим запуска ваша деятельность не является «множественной / стандартной / стандартной» ИЛИ , которую вы задали FLAG_ACTIVITY_SINGLE_TOP в том же намерении, тогда это намерение будет доставлено в onNewIntent().
* 1028 текущего экземпляра. * Поскольку ваша MainActivity имеет режим запуска «по умолчанию», и вы не задаете FLAG_ACTIVITY_SINGLE_TOP в том же самом намерении, поэтому оно будет завершено и создано заново.

Но вы хотите, чтобы пользователи вернулись к текущему экземпляру MainActivity, поэтому вам нужно установить FLAG_ACTIVITY_SINGLE_TOP в том же ключе.

Просто измените код с

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

на

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
...