防止在android上的xamarin表单中的后退按钮关闭

Chr*_*ris 17 android xamarin xamarin.forms

我想通过按下android上的xamarin表单中的硬件后退按钮来阻止关闭应用程序.

我想,你可以使用应用程序中的硬件后退按钮(工作正常)进行导航,但是当达到导航堆栈中的第一页时,不想退出.

我尝试在xamarin表单中使用OnSleep事件,但在这里我无法取消退出.

我也尝试在android中捕获后退按钮:

    public override void OnBackPressed()
    {
        //base.OnBackPressed();
    }
Run Code Online (Sandbox Code Playgroud)

但是当使用xamarin表单时,我不知道当前显示的是哪个页面.所以我不知道是否允许导航

Chr*_*ris 18

它适用于评估NavigationStack(当您使用NavigationPage时).

在我的Activity中,我重写了OnBackPressed

public override void OnBackPressed()
{
    if(App.Instance.DoBack)
    {
        base.OnBackPressed();
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的xamarin表单应用程序(App.Instance(它是一个单例))中,我将像这样评估当前页面的NavigationStack.

public bool DoBack
{
    get
    {
        NavigationPage mainPage = MainPage as NavigationPage;
        if (mainPage != null)
        {
            return mainPage.Navigation.NavigationStack.Count > 1;
        }
        return true;                
    }
}
Run Code Online (Sandbox Code Playgroud)

当NavigationStack中只剩下一页时,我不会调用base.OnBackPressed,这样我就不会关闭App了.

![测试]


Iai*_*KER 11

这就是Xamarin Forms MasterDetail页面场景代码的样子......

    public bool DoBack
    {
        get
        {
            MasterDetailPage mainPage = App.Current.MainPage as MasterDetailPage;

            if (mainPage != null)
            {    
                bool canDoBack = mainPage.Detail.Navigation.NavigationStack.Count > 1 || mainPage.IsPresented;

                // we are on a top level page and the Master menu is NOT showing
                if (!canDoBack)
                {
                    // don't exit the app just show the Master menu page
                    mainPage.IsPresented = true;
                    return false; 
                }
                else
                {
                    return true;
                }                    
            }
            return true;
        }
    }
Run Code Online (Sandbox Code Playgroud)


Sen*_*izh 9

只需在页面中给你一个空白的电话,你想要阻止,比如

protected override bool OnBackButtonPressed()
{
return true;
}
Run Code Online (Sandbox Code Playgroud)

这将阻止XF-Droid中的后退按钮.