按钮在后台返回我的应用,当您恢复运行时,它会再次启动

时间:2018-12-13 06:14:05

标签: mvvm xamarin.forms

我正在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");
    }

谢谢。

3 个答案:

答案 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)

这意味着您必须使用DataSource或将数据保存在“应用程序”属性中。 您必须在App.xaml.cs文件中添加以下代码:

Setting Plugin

有关设置插件,您可以参考this链接。