是否有 Xamarin 导航的替代方案? [英] Is it there an alternative to Navigation for Xamarin?

查看:51
本文介绍了是否有 Xamarin 导航的替代方案?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 Xamarin.Forms 开发一个 Android 应用程序.我在导航方面遇到了一些问题.

I working on an Android App using Xamarin.Forms. I have a few problems with the navigation.

当我使用 Navigation.PushAsync(new ContentPage()); 时,我的导航流会创建 bucles.当我按下返回时,我会重新访问那些无法访问的页面.比如我推送这个页面:

When I use Navigation.PushAsync(new ContentPage()); my navigation flow creates bucles. When I press go back, I revisit pages that sould be inaccesables. For example I push this pages:

登录(去)>菜单(去)>关闭会话(去)>登录

Login (go)> Menu (go)> CloseSession (go)> Login

当我点击Android的返回按钮时,流程是这样的:

When I click the go back button of Android, the flow is this:

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

Login (go)> Menu (go)> CloseSession (go)> Login (goback)> CloseSession (goback)> Menu (goback)> Login

不想退出应用程序:

登录(去)>菜单(去)>关闭会话(去)>登录(返回)>应用关闭

Login (go)> Menu (go)> CloseSession (go)> Login (goback)> App close

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

I know if I use Navigation.PopAsync(); the last push page is remove from the navigetion stack but it look tricky for me. Is it there an alternative to Navigation for Xamarin? Some way to create navigate pages avoiding adding them into the stack?

推荐答案

我相信您正在尝试做的是操作导航堆栈".

I believe what you are trying to do is "manipulating the navigation stack".

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

  • If you don't want a page to be on the navigation stack you can remove it as soon as you navigate away from it using Navigation.RemovePage(page). You can pass a saved reference of that page, or look it up in the Navigation.NavigationStack, if it's a known scenario (known navigation stack index of the page you want to remove) you can do:

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

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

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

Or you can use InsertPageBefore() followed by a PopAsync() as shown in the navigation docs example:

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

These methods enable a custom navigation experience, such as replacing a login page with a new page, following a successful login. The following code example demonstrates this scenario:

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

 else
 {
    // Login failed
  }
}

这篇关于是否有 Xamarin 导航的替代方案?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆