【问题标题】:button back to my app in the background and when you resume it starts again按钮在后台返回到我的应用程序,当您恢复时它会再次启动
【发布时间】:2019-05-14 07:41:47
【问题描述】:

我正在 Xamarin.Forms 中开发一个应用程序,在我登录到我的应用程序时尝试将主详细信息页面变成我的 MainPage 之前,我已经实现了这一点。现在我有一个问题,当我使用手机后面的按钮时,我的应用程序是 miimiza 并进入后台,这是我希望的行为,但是当我返回我的应用程序时不会继续显示我的主详细信息页面,而是返回到我的登录页面。

好像我的应用程序运行了两次,或者至少同时存在两个 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");
    }

谢谢。

【问题讨论】:

  • 登录后,您是否将凭据保存在应用程序属性中?然后在 App 开始使用该属性并检查用户是否有效。如果有效,则重定向到主详细信息页面。如果不重定向到登录。
  • 你能解释一下你的答案吗?在应用程序的属性中,我保留令牌以验证未来对 API 的调用。
  • 当然。您能分享您尝试过的代码吗?
  • 我已经用我的部分代码更新了我的问题。
  • @lavilaso 您能否详细说明您的问题,因为尚不完全清楚您要迭代什么?它在 Android/iOS/两者上吗?您按下哪个按钮将其带到后台?您的应用程序在进入后台时是否被杀死?

标签: mvvm xamarin.forms


【解决方案1】:

我希望这是在 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();
    }

【讨论】:

    【解决方案2】:

    当您按下Home 按钮时,应用程序将暂停,并且 当前状态被保存,最后应用被冻结 无论是什么状态。在此之后,当您启动应用程序时,它是 从上次保存时恢复。

    但是,当您使用 Back 按钮时,您会不断返回 活动堆栈,一个接一个地关闭一个活动。到底, 当您关闭您打开的第一个活动时,您的应用程序 退出。这就是为什么每当你像这样关闭你的应用程序时,它 再次打开时会重新启动。

    答案来自this answer。最初的问题询问的是原生 Android 平台,但这里仍然适用。

    【讨论】:

      【解决方案3】:

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

      if (SettingClass.UserName == null)
                      MainPage = new LoginPage();
       else
                      MainPage = new MasterDetailPage();
      

      设置插件可以参考this链接。

      【讨论】:

      • 这种方法解决了通过按主详细信息页面上的后退按钮返回到我的 WelcomePage / LoginPage 的问题,尽管我仍然存在如果我关闭会话并立即尝试再次登录的问题并执行一些操作,例如输入错误的用户名或密码 DisplayAlert 执行两次。我认为发生上述情况是因为在会话开始时我更改了 MainPage 和 MessaggingCenter.Unsubscribe 我在受保护的覆盖 OnDisAppearing () 中抛出的内容,并且在更改 MainPage 时它永远不会运行。你能想出办法改变这种情况吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多