后退按钮可在Xamarin上恢复Android中不需要的上一页

时间:2017-03-01 10:35:01

标签: android xamarin

我正在开发一个以登录页面开头的应用程序,名为LoginPage

登录后,将查看名为UserPage的其他页面。

弹出LoginPage并按下UserPage后,按Android设备上的后退按钮,即可转到主屏幕。

在主屏幕上,我从应用管理器(设备右下方的小方框按钮)重新打开应用,然后重新显示LoginPage

为什么?

弹出LoginScreen的代码如下:

Application.Current.MainPage = new UserPage();
await Navigation.PopToRootAsync(true);

编辑1 主要应用方法

    public App()
    {
        InitializeComponent();

        var navPage = new NavigationPage(new LoginPage());
        NavigationPage.SetHasNavigationBar(navPage.CurrentPage, false);

        MainPage = navPage;
    }

3 个答案:

答案 0 :(得分:0)

您的应用程序的主页面没有可以存储推送/弹出页面的导航堆栈。

您可以尝试将代码更改为:

xetr

这应该在您的用户页面周围创建一个NavigationPage包装器,该包装器将具有用于弹出和推送的预构建堆栈。

答案 1 :(得分:0)

我认为您应该查看您的应用是否进入

    protected override void OnResume()

    protected override void OnStart()

当您将应用程序置于后台时,您的应用程序已被操作系统杀死,因此,当您重新打开它时,它会从“开始”开始,因此从“登录”开始。

我认为你可以在你的

中保存一个布尔标志
Application.Current.Properties

当你的应用程序启动时,如果此标志为true,则从UserPage开始,否则从LoginPage开始

答案 2 :(得分:0)

  

在主屏幕上,我从应用管理器(设备右下方的小方块按钮)重新打开应用程序,然后重新出现LoginPage。

根据你的代码:

Application.Current.MainPage = new UserPage();
await Navigation.PopToRootAsync(true);

弹出登录页面并将主页面设为UserPage。目前,您的页面堆栈只有UserPage。单击后退按钮时。 该应用已被系统杀死。

但是android会在应用管理器上保持应用程序的削减效果。当你点击镜头切换实际上你正在重新打开你的应用程序。您的MainPage为LoginPage,因此您会再次看到LoginPage

我在app init函数中添加了输出消息:

App Init:

public App()
{
    InitializeComponent();
    System.Diagnostics.Debug.WriteLine("ini app again");
    MainPage = new NavigationPage(new MainPage());
}

MainPage Init

public MainPage()
{
    System.Diagnostics.Debug.WriteLine("init Mainpage again");
    InitializeComponent();
}

当我点击按钮弹出主页并转到第1页:

private async void bt1_Clicked(object sender, EventArgs e)
{
      Application.Current.MainPage = new Page1();
      await Navigation.PopToRootAsync(true);
}

运行我的代码,当您单击实际再次打开应用程序的后退按钮时,您将找到该代码,它将再次显示主页:

enter image description here