Android - Держите кучу действий в каждой задаче - PullRequest
1 голос
/ 05 мая 2020

У меня мало занятий, например A, B, C, D, E, F. Мой главный экран - это действие A. Теперь я запускаю действие B из этого и C из действия B.

  • Итак, теперь мой стек A-> B -> C. Теперь, если я вернусь, я смогу перемещаться в обратном порядке. Но если я начну действие D с C.
  • , я хочу, чтобы мой стек был A-> D, поскольку я хочу убить B и C.

Мои ожидания: A - это мой главный экран, который должен быть всегда. B и C при наличии одной задачи, а D, E, F - при выполнении другой задачи.

Есть еще одна загвоздка - я даже могу начать действие D-> E-> F из A и B из F. В том случае, когда я начинаю B из F, D, E, F должен удалить из стека

1 Ответ

0 голосов
/ 06 мая 2020

Есть несколько способов выполнить sh это, в зависимости от требований вашего приложения. Вы должны использовать startActivityForResult(), чтобы запустить одно (или несколько) действий, которые затем могут вернуть результат в Activity, который его запустил. Это может быть хорошим решением для вас.

Другой альтернативой является использование вашего ActivityA в качестве своего рода диспетчера. В этом случае, когда C хочет запустить D, но также очистить сначала стек задач обратно в A, вы можете сделать что-то вроде этого в C:

Intent intent = new Intent(this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("launchActivity", "ActivityD");

Использование флагов CLEAR_TOP и SINGLE_TOP приведет к тому, что все действия будут выполняться поверх существующего экземпляра ActivityA должен быть завершен, и Intent будет перенаправлен на onNewIntent() существующего экземпляра ActivityA.

Теперь, в ActivityA, замените onNewIntent() примерно таким:

if (intent.hasExtra("launchActivity)) {
    if (intent.getExtra("launchActivity").equals("ActivityD")) {
        Intent launchIntent = new Intent(this, ActivityD.class);
        startActivity(launchIntent);
    } else ...
}
...