У меня есть 3 действия A, B и C. A ведет к B, что приводит к C. Я хотел бы иметь возможность двигаться вперед и назад между A и B, но я хочу закончить как A, так и B, когда C начнется, Я понимаю, как закрыть B при запуске C с помощью намерения, но как я также закрываю A при запуске C?
Завершить работу из другого вида деятельности
Ответ 1
В методе onCreate()
присвойте статическому экземпляру переменной для создания Singleton:
public static ActivityA instance = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
instance = this;
}
@Override
public void finish() {
super.finish();
instance = null;
}
то в C:
public void onCreate(Bundle savedInstanceState) {
if(ActivityA.instance != null) {
try {
ActivityA.instance.finish();
} catch (Exception e) {}
}
}
(Повторите выше код для B, а также A)
Я бы сказал, что это НЕ элегантно и обязано вводить странные ошибки жизненного цикла.
Было бы лучше, если бы вы могли настроить свое требование - если вы не можете использовать одну активность и изменить A, B и C на Fragments
?
Я бы предложил широковещательную рассылку, но, как я понимаю, у вас не может быть приемников широковещательных сообщений на уровне "без возобновления".
Использование Service
для привязки к действиям кажется излишним - но вы можете подумать, что если приведенное выше не работает.
Удачи!
Ответ 2
((Activity)context_of_another_activity).finish();
Ответ 3
Когда вы запустите C из B, сделайте это следующим образом:
Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Теперь начинается C, но A и B ушли.
Однако, я думаю, что лучше, если вы можете переосмыслить свой дизайн таким образом, чтобы C не зависел от завершения A или нет.