打开页面,无需后退或关闭

时间:2016-08-17 05:24:56

标签: c# xamarin navigation xamarin.forms

我想在成功登录后将用户重定向到主页面,因此我不希望他有后退按钮或能够再次访问登录页面。

我已将用户重定向到登录页面,如下所示:

if (isAuthenticated)
{
    MainPage = new General.Pages.MainPage();
}
else
{
    MainPage = new Account.Pages.Login();
}

我使用此代码进行成功登录,但这不起作用并且例外:

await Navigation.PopAsync(false);
await Navigation.PushAsync(new General.Pages.MainPage());

给定的例外是:

  

System.InvalidOperationException:Android上不支持全局支持PopAsync,请使用NavigationPage。

并且无需提及所提及的NavigationPage也不起作用。

3 个答案:

答案 0 :(得分:2)

有两种方法可以解决这个问题。

  1. 最初在App.cs的构造函数中将$('#show').on('click', function(){ $('tbody td').css('display','table-cell'); }); 设置为主页。然后在您的主页的App.MainPage事件中或者如果它具有ViewModel,则其Initialising方法检查用户是否经过身份验证。如果是,请加载他的数据。如果不是,则将您的登录页面显示为模态。登录成功后,您可以弹出登录页面的模式并加载主页的数据。如果需要,您还可以在登录页面中处理后退按钮事件,以禁止用户退出模态页面。 缺点 - 在登录模式显示之前,主页将显示一秒钟。

  2. 在App.cs的构造函数中,检查用户是否经过身份验证。如果用户已通过身份验证,则通过将其设置为OnAppearing来显示主页。否则将MainPage设置为登录页面。登录成功后再次设置MainPage 缺点 - 在构造函数中检查isAuthenticated可能会使应用程序的初始加载看起来更慢。

  3. 您遇到的错误是因为您没有将任何页面推入导航堆栈。因此你的流行音乐不会奏效。

答案 1 :(得分:1)

var firstPage = isAuthenticated ? new General.Pages.MainPage() : new Account.Pages.Login();
MainPage = new NavigationPage(firstPage);

如果您将使用

  

提到NavigationPage

正确地,PopAsync将起作用。

答案 2 :(得分:0)

我刚想通了,您可以随时使用此代码更改MainPage

App.Current.MainPage = new General.Pages.MainPage();

我留下这篇文章,如果它可以帮助其他用户。