我正在开发一个以登录页面开头的应用程序,名为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;
}
答案 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);
}
运行我的代码,当您单击实际再次打开应用程序的后退按钮时,您将找到该代码,它将再次显示主页: