Итак, у меня есть действие, которое может иметь два разных родительских действия в зависимости от того, откуда оно было запущено.Кнопки «Назад» (панель приложения и кнопка «Назад») правильно работают в приложении, в зависимости от того, какое действие оно запустило.
Виджет моего приложения открывает ту же активность с намерением ожидания.Это так правильно.Фактически, эта логика кнопки «Назад» по-прежнему работает правильно при нажатии на виджет, если приложение не было полностью закрыто.
Пример: Активность A
запускает активность C
, кнопка возврата перемещается с C
до A
.Действие A
запускает действие B
, которое затем запускает действие C
, поэтому обратная навигация - C
-> B
-> A
.Это работает правильно в приложении и из резюме виджета C
через ожидающее намерение.
Проблема возникает, когда пользователь закрывает приложение (т.е. очищает его от действий, нажав кнопку обзора и удалив ее).Как только это происходит, виджет приложения по-прежнему функционирует нормально, открывая правильную активность, но кнопка «Назад» возвращает пользователя на домашний экран Android вместо правильной родительской активности.(IE NO C
-> A
ИЛИ C
-> B
-> A
, просто C
-> home screen
.)
В настоящее время родительская активность не объявлена длямое запущенное действие в манифесте.
ВОПРОС: Как сохранить правильную обратную навигацию к какому действию, к которому нужно вернуться, когда система удаляет приложение из памяти?Есть ли способ объявить два родительских действия и выбрать одно на основе набора намерений?Или другой способ объявить, к какому виду деятельности перейти обратно с данными, переданными из намерения?(Пользовательский интерфейс действия немного отличается в зависимости от того, какая операция его запустила, и эта информация сохраняется через ожидающее намерение виджета приложения.)
К вашему сведению: На всякий случай это действие C
использует этот код для обратной функциональности:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) // Press Back Icon
{
onBackPressed();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
Кроме того, я знаю, что могу начать новое действие с помощью метода onBackPressed()
, но если бы я сделал это, мне нужно было бы как-то узнать, открыл ли виджет действиеновый или возобновленный из системного стека активности И не испортить обратную навигацию по активности B
или C
из уже нормальной и функционирующей навигации по активности.