【问题标题】:Xamarin Forms Android System Exception "Android only allows one navigation page on screen at a time"Xamarin Forms Android 系统异常“Android 一次只允许在屏幕上显示一个导航页”
【发布时间】:2014-06-15 01:28:18
【问题描述】:

最近我决定尝试Xamarin Forms,所以我开始将我的 Windows Phone / Android Xamarin 项目迁移到新的“表单”格式。

迁移两个简单屏幕(视图)后,代码在我的 Windows Phone 上运行良好,但在 Android 平台上崩溃。我正在使用两台设备来测试代码,没有模拟器来避免不必要的麻烦。

在android平台上引发的异常是:System.Exception: Android only allows one navigation page on screen at a time

这个问题与“View”类本身无关,因为一旦我将它设置为 Android 的“开始屏幕”,它就不会发生。

恐怕问题与我通过 Xamarin 提供的“Navigation.PushAsync(...)”方法“推送”两个屏幕有关。

关于如何实际修复它的任何想法?

编辑:

Code Sample

概述:“MainView.cs”只是一个内容页面,顶部有一个标签,后面跟着两个垂直对齐的按钮。

如何重现异常:单击主视图上的“获取所有用户”按钮。我已经修改了代码以在单击按钮后推送相同的视图,而不是推送另一个视图(具有用户列表视图的视图,我没有包括在内,只是为了简单起见)。单击按钮后,它将通过调用“Navigation.PushAsync(...)”导航到“MainView”的新实例。这将在屏幕加载后触发异常。

【问题讨论】:

  • 请贴出导致异常的代码。
  • 添加了一个代码示例,其中包含对异常以及如何重现它的一些小的概述。如果您还需要什么,请告诉我。
  • 请内嵌代码,格式正确,而不是使用外部链接。

标签: c# xamarin xamarin.android


【解决方案1】:

您正在嵌套导航页面。这不是必需的。试试这个:

public class ViewsHandler
{
        public static Page GetMainPage()
        {
            return new MainView();
        }

        public static Page GetUsersListPage()
        {
            return new UsersListView ();
        }
}

public class MainActivity : AndroidActivity
{
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Initializing Xamarin Form
            Xamarin.Forms.Forms.Init (this, bundle);

            // create a single NavigationPage wrapping your content
            SetPage (new NavigationPage(ViewsHandler.GetMainPage()));
        }
}

【讨论】:

  • 解决了我的问题。你介意再解释一下,为什么它会起作用?
  • 在您的原始代码中,您将 NavigationPage 推送到已经存在的导航堆栈上。您只需要一个层次结构中的 NavigationPage。
猜你喜欢
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 2021-11-14
相关资源
最近更新 更多