Ioni c 4 android аппаратная кнопка возврата и панель инструментов назад не работают в одном потоке - PullRequest
0 голосов
/ 16 апреля 2020

Я столкнулся с проблемой в моем приложении android, которое я разработал с использованием ioni c 4. Мой сценарий заключается в том, что если я перемещаюсь по страницам и возвращаюсь с помощью кнопки назад на панели инструментов, а затем снова перехожу на другие страницы и возвращаюсь с помощью android аппаратная кнопка возврата, затем страницы, на которые я переместился назад с помощью кнопки возврата на панели инструментов, отображаются посередине при использовании аппаратной кнопки возврата.

Страница A-> B -> C, а затем на кнопке возврата на панели инструментов C -> B-> A

Снова перейдите на страницу A-> D-> E, а затем с помощью аппаратной кнопки возврата назад перейдите на E-> D-> B -> C -> B-> A

Невозможно сохранить состояние.

Мой код

В конструкторе app.component.ts

this.router.events.subscribe(event => {
      const url = this.router.url //current url
      if (event instanceof NavigationEnd) {
        const isCurrentUrlSaved = this.navLinksArray.find((item) => { return item === url });
        if (!isCurrentUrlSaved) this.navLinksArray.push(url);
      }
    }); 


ngAfterViewInit() {

    this.backButtonSubscription = this.platform.backButton.subscribe(() => {
          if (this.router.url === '/tabs/home') {
            navigator['app'].exitApp();
          } else {
            if (this.navLinksArray.length > 1) {
              this.navLinksArray.pop();
              const index = this.navLinksArray.length - 1;
              const url = this.navLinksArray[index];
              this.navCtrl.navigateBack(url);
            }
          }
        });
      }
}

Заранее спасибо.

1 Ответ

0 голосов
/ 17 апреля 2020

Я думаю, this.navCtrl.navigateBack (url); снова нажимает на страницы, как будто поведение асинхронное, просто предполагая.

Почему бы вам просто не открыть всплывающую страницу, скажем, у вас есть общая функция c

ngAfterViewInit() {
 static BackButton(platform:Platform,navCtrl:NavController){
    platform.registerBackButtonAction(() => {
     navCtrl.pop();
   }, 0)
  }
}

и со страницы навигации вызов компонента, который должен иметь конструктор (publi c navCtrl: NavController, publi c platform: Platform) {}, определить, а затем вызвать метод BackButton generis c (this.platform, this.navCtrl) в той же навигации компонент страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...