最近我决定给Xamarin窗体一个尝试,所以我开始迁移我的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(…)"方法" push "两个屏幕有关。
有什么建议吗?
编辑:代码示例
概述:"MainView.cs"只是一个内容页,顶部有一个标签,后面是两个垂直排列的按钮。
如何重现异常:单击主视图上的"获取所有用户"按钮。我修改了代码,一旦按钮被点击,就会推送相同的视图,而不是推送另一个视图(视图有一个用户列表视图,我没有包括,只是为了简单)。一旦按钮被点击,它将通过调用"Navigation.PushAsync(…)"导航到一个新的"MainView"实例。这将在加载屏幕后触发异常。
您正在嵌套导航页。这是不必要的。试试这个:
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()));
}
}