2015-02-11 154 views
1

据我所见,如果主机本地活动​​被重新创建,Xamarin表单页面被重新创建。 如果我在设备上启用“不保留活动”,可以很容易地进行测试。 我希望NavigationPage能够保留Xamarin Forms Pages的后台堆栈。Xamarin表单导航堆栈

我怎样才能保留后堆栈? 我是否必须实现我自己的NavigationPage? 当前版本的Xamarin Forms有什么选项?

回答

1

安德烈,

使根视图控制器你NavigationPage你可以把尽可能多的ContentPage(S),你想。导航页面是保持视图的堆栈被自动推,然后你可以将它们流行到您的rootview ContentPage或以前ContentPage(S)...

var mainNav = new NavigationPage(new BoxedView()); 

然后推:

Xamarin.Forms.Device.BeginInvokeOnMainThread(() => 
    Navigation.PushAsync(CONTENT_PAGE_OBJECT, false)); 

流行:

Xamarin.Forms.Device.BeginInvokeOnMainThread(() => Navigation.PopAsync(true)); 
+0

从应用程序切换离开时,再切换回来,如果所有页面实例被摧毁发生了什么(假设的,因为低米埃默里)?当重新创建本地主机视图时,一次创建并推送所有Xamarin Forms Page实例可能看起来不太好。 Xamarin Forms的问题是我不能基于页面类型重新创建导航堆栈,它只能用于实例。作为一种解决方案,我可能能够覆盖导航返回并基于已保存的堆栈插入页面;我正在查看是否有人已经执行了这个权利 – 2015-03-02 23:13:16

+0

我看到了,所以您担心内存占用。 如果您创建自己的导航控制器,并根据要显示的页面构建类,那么该如何操作? 。这个坏消息是你需要保留堆栈的数量,并在你弹出视图后摧毁页面对象... 令人惊叹的组合...让我们知道你是否能够拿出一些东西..祝你好运.. – 2015-03-04 20:11:19

+0

不,这不关于内存占用。正如我所提到的,Xamarin Forms中的导航backstack可以处理Pages实例,请参阅INavigation接口。所以,在重新创建backstack时,您必须创建所有页面并将其推回。但每个页面都有自己的视图模型,所以也创建了它。视图模型可以调用不同的服务。除非Xamarin Forms真正支持自己重新创建后台堆栈,否则只有在必要时才处理页面创建,后台堆栈不应该用于实例。 – 2015-03-04 23:43:39