Почему моя заявка не требует подтверждения для выхода? - PullRequest
1 голос
/ 08 апреля 2020

У меня есть MasterDetailPage, а страница сведений - это страница навигации. Я хочу, чтобы PopAsyn c когда стек подробных страниц был> 1. Когда он = 1, приложение должно спросить, хочет ли пользователь. В настоящее время он работает только тогда, когда у него есть 2 страницы в стеке (root и вторая), если у вас есть 3 страницы, он выталкивает асин c все страницы и переходит на страницу root. Также, если вы уже находитесь на странице root, она не запрашивает, просто закройте приложение.

PS: диалоговое окно подтверждения работает правильно в других частях приложения.

 public async override void OnBackPressed()
        {
            if (Rg.Plugins.Popup.Popup.SendBackPressed(base.OnBackPressed))
                await App.Current.MainPage.Navigation.PopPopupAsync();
            else
            {
                if (App.Current.MainPage is MasterDetailPage mdp)
                {
                    if (mdp.Detail.Navigation.NavigationStack.Count > 1)
                        await mdp.Detail.Navigation.PopAsync();
                    else
                    {
                        Alerta alerta = new Alerta();
                        bool opt = await alerta.ShowAlert("confirm", "App name", "Não existem páginas para retornar, você já está na página inicial.", "Continuar", "Encerrar");
                        if (!opt)
                            Finish();
                    }
                }
                else
                {
                    Alerta alerta = new Alerta();
                    bool opt = await alerta.ShowAlert("confirm", "App name", "Não existem páginas para retornar, você já está na página inicial.", "Continuar", "Encerrar");
                    if (!opt)
                        Finish();
                }
            }
        }

1 Ответ

1 голос
/ 09 апреля 2020

В PCL

protected override bool OnBackButtonPressed()
        {
            base.OnBackButtonPressed();
            // Custom logic for BackButtonPresssed

                Device.BeginInvokeOnMainThread(async () =>
                {
                    var result = await DisplayAlert("Warning", "Are you sure you want to exit the application?", "Yes", "No");
                    if (result)
                    {
                        MessagingCenter.Send<HomePage>(this, "Shutdown");
                    }
                });
                return true;

        }

В Android MainActivity OnCreate ()

Добавить код ниже

MessagingCenter.Subscribe<HomePage>(this, "Shutdown", (sender) =>
                {
                    OnShutdown();
                });
...