Наконец, я реализовал решение, вдохновленное ответом @ Manoj.
Я слушаю activityBackPressed event
и устанавливаю args.cancel = true
для предотвращения поведения по умолчанию.
При каждом изменении вкладки я сохраняю ранее посещенную вкладку. Затем при каждом activityBackPressed event
я проверяю, может ли текущая розетка вернуться назад или нет с помощью this.routerExtension.canGoBack({ outlets: [this.tabVisibleName], relativeTo: this.activeRoute })
.
Если нет, то я возвращаюсь к предыдущей вкладке программно, если список посещенных вкладок не пуст. Если список посещенных вкладок пуст, я устанавливаю args.cancel = false
для выхода из приложения.
Если this.routerExtension.canGoBack({ outlets: [this.tabVisibleName], relativeTo: this.activeRoute })
вернуть true, я просто вернусь: this.routerExtension.back({ outlets: [this.tabVisibleName], relativeTo: this.activeRoute });
Примечание: вы должны удалить прослушиватель, когда приложение переходит в фоновый режим, в противном случае у вас будет несколько прослушивателей (один по резюме):
application.on(application.exitEvent, (args) => {
if (args.android) {
application.android.off(application.AndroidApplication.activityBackPressedEvent);
}
});
Спасибо за вашу помощь