我正在Xamarin.Forms中开发一个应用程序,在尝试使主详细信息页面成为我登录应用程序时的主页面之前,我已经实现了这一目标。现在,我遇到的问题是,当我使用电话后面的按钮时,我的应用程序处于miimiza并进入后台,这是我希望的行为,但是当我返回到我的应用程序时,它不会继续显示我的主详细信息页面,而是返回到我的LginPage。
好像我的应用程序运行了两次,或者至少同时存在两个LoginPage实例,这是因为在我的LoginPage中,我根据页面正在通过MessaginCenter监听的一些消息触发了一些DisplayAlert。他们是他们开枪两次。
有人可以告诉我如何在主详细信息页面上将其退还给我的应用程序,而又不以所描述的奇怪方式重新启动吗?
LoginView.xaml.cs:
public partial class LogonView : ContentPage
{
LogonViewModel contexto = new LogonViewModel();
public LogonView ()
{
InitializeComponent ();
BindingContext = contexto;
MessagingCenter.Subscribe<LogonViewModel>(this, "ErrorCredentials", async (sender) =>
{
await DisplayAlert("Error", "Email or password is incorrect.", "Ok");
}
);
}
protected override void OnDisappearing()
{
base.OnDisappearing();
MessagingCenter.Unsubscribe<LogonViewModel>(this, "ErrorCredentials");
}
}
我的ViewModel的一部分:
if (Loged)
{
App.token = token;
Application.Current.MainPage = new RootView();
}
else
{
MessagingCenter.Send(this, "ErrorCredentials");
}
谢谢。
答案 0 :(得分:0)
我希望这是在Android中。您所能做的就是,您可以重写MainActivity中的backbuttonpressed方法,以免在进入页面时按下后退按钮时关闭。如下所示,您也可以添加一些条件。
public override void OnBackPressed()
{
Page currentPage = Xamarin.Forms.Application.Current.MainPage.Navigation.NavigationStack.LastOrDefault();
if (currentPage != null)
{
if (currentPage.GetType().Name == "HomePage" || currentPage.GetType().Name == "LoginPage")
{
return;
}
}
base.OnBackPressed();
}
答案 1 :(得分:0)
当您按下
Home
按钮时,应用程序将暂停,并且 保存当前状态,最后将应用程序冻结在 无论状态如何。之后,启动应用程序时 从保存它的最后一点恢复。但是,当您使用
Back
按钮时,您将继续向后移动 活动堆栈,然后关闭一个活动。到底, 当您关闭打开的第一个活动时,您的应用程序 退出。这就是为什么每当您这样关闭应用程序时, 再次打开它会重新启动。
答案来自this answer。最初的问题是关于本地Android平台的,但仍然适用于此。
答案 2 :(得分:0)