Снова перезапустите заданную c активность из середины стека, закрыв все вышеуказанные действия (включая указанную c одну) - PullRequest
1 голос
/ 05 февраля 2020

У меня есть стек активности

A>B>C>D>E>F

С Αctivity FI хочу начать Αctivity C снова с fre sh и закрыть все C, D , E, F, поэтому новый стек Αctivity будет:

A>B>C (C как упражнение Fre sh)

Я пытался использовать singleTask to Activity C но это не перезапуск Activity C. Это возобновляет Activity C

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Наконец, я отвечаю на свой вопрос. Если кто-то сталкивается с той же проблемой, вы можете отослать ответ.

Поскольку я много исследовал то, чего хотел достичь, я столкнулся с этим, невозможно возобновить действие C. Поэтому я решил это, добавив launchTode singleTask в Activity C. И из Activity FI снова запускаю действие C и выполняю задачу, которую я хочу выполнить в onNewIntent () переопределенный метод для действия C.

0 голосов
/ 05 февраля 2020

Используйте startActivityForResult для запуска C, D, E, F Упражнение

  public static void start(@NonNull Context context, @NonNull Intent intent) {
         context.startActivityForResult(intent, REQUEST_CODE);
        }

Вызовите этот метод, когда вы заканчиваете F Activity (Место, которое вы хотите перезапустить C Activity)

 public static void finishAct(@NonNull Context context) {
       Intent data = new Intent();
        data.putExtra("recreateC", true);
          context.setResult(RESULT_OK, data);
            context.finish();
    }

В активах E и D

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 // handle result
    if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
finishAct(this)
}
}

В C Активность

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // handle result
    if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
      finishAct(this)
      // todo start C Activity again 
    }
  }
...