繁体   English   中英

Xamarin 的导航是否有替代方案?

[英]Is it there an alternative to Navigation for Xamarin?

我正在使用 Xamarin.Forms 开发 Android 应用程序。 我的导航有一些问题。

当我使用Navigation.PushAsync(new ContentPage()); 我的导航流程创建了 bucles。 当我按下 go 后,我会重新访问那些无法访问的页面。 例如我推送这个页面:

登录 (go)> 菜单 (go)> CloseSession (go)> 登录

当我点击 Android 的 go 后退按钮时,流程是这样的:

登录(go)>菜单(go)>关闭会话(go)>登录(返回)>关闭会话(返回)>菜单(返回)>登录

退出应用程序:

登录(go)>菜单(go)>关闭会话(go)>登录(goback)>应用程序关闭

我知道我是否使用Navigation.PopAsync(); 最后一个推送页面已从导航堆栈中删除,但对我来说看起来很棘手。 Xamarin 的导航是否有替代方案? 某种创建导航页面的方法避免将它们添加到堆栈中?

你不应该使用这样的导航。 一些forms(特别是登录),完成后应该弹出。

  1. 推送登录表单
  2. 用户完成登录
  3. 弹出登录表单
  4. 决定接下来应该推送哪个表单。

在您的场景中,我建议您使用模态页面来呈现登录页面。

它将创建一个不会影响原始堆栈的额外模式堆栈。

用户完成登录后,弹出登录页面。


流量

  • NavigationPage(root page: Main)设置为 App 中的 MainPage。
  • 使用PushModalAsync显示登录页面。
  • 完成登录
  • 使用PopModalAsync关闭登录页面。

我相信您正在尝试做的是“操纵导航堆栈”。

  • 如果您不希望页面位于导航堆栈上,则可以在使用Navigation.RemovePage(page)离开该页面后立即将其删除。 您可以传递该页面的已保存引用,或者在Navigation.NavigationStack中查找它,如果它是已知场景(您要删除的页面的已知导航堆栈索引),您可以执行以下操作:

    Navigation.RemovePage(Navigation.NavigationStack[index]);

  • 或者,您可以使用InsertPageBefore()后跟PopAsync() ,如导航文档示例所示:

这些方法支持自定义导航体验,例如在成功登录后将登录页面替换为新页面。 以下代码示例演示了这种情况:

async void OnLoginButtonClicked(object sender, EventArgs e)
{
  if (IsValid)
  {
    Navigation.InsertPageBefore(new MainPage (), this);
    await Navigation.PopAsync();
  }

 else
 {
    // Login failed
  }
}

从任何活动页面,您可以使用打开另一个页面

StartActivity(typeof(YourView));

当该页面完成时,它会将您返回到您从中调用它的页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM