【发布时间】:2021-01-12 05:55:45
【问题描述】:
上下文:我们的团队正在尝试使用Xamarin.Forms (XF) Embedding 慢慢将我们的项目从使用Xamarin.Native 转换为XF,以便将来更容易维护和实现功能.
问题:正如您在链接引用的行上的函数参数中看到的那样,Xamarin 允许您将任何类型的 XF Page 转换为 @987654322 中的本机 ViewController @,但它只允许将 XF ContentPage 转换为 Android 中的原生 Fragment。
重要性:这种差异起主要作用,因为通过Xamarin.Native Android,您无法实现XF NavigationPage。这意味着什么?在 Xamarin.Native Android 中,您无法将应用转换为使用 XF,因此您无法调用 PushAsync 或 PopAsync 等函数。
补充说明:有不同类型的“页面”对象,如 ContentPage、NavigationPage 等。您可以在 iOS, as you can see in this sample here 上打开 NavigationPages,它允许使用 PushAsync 或 PopAsync 等功能,只需执行以下操作:
UIViewController user2 = new NavigationPage(new TestPage()).CreateViewController();
所以对于Android as seen here,目前我们只能这样做
Android.Support.V4.App.Fragment fragment = new TestPage().CreateSupportFragment(this);
我想知道有没有办法做这样的事情?
Android.Support.V4.App.Fragment fragment = new NavigationPage(new TestPage()).CreateSupportFragment(this);
问题:之前有没有人从 Xamarin.Android 原生打开过Xamarin.Forms NavigationPage?有谁知道允许我们使用 PushAsync 和 PopAsync 函数的解决方法?
PS:这是 Github 的游乐场,它是一个 Spike
【问题讨论】:
-
问题不清楚。您是否尝试在本机 android 渲染器中获取 Xamarin 表单页面引用?您可能希望在此处添加相关代码,而不是将链接粘贴到整个 github(我能够在 Activity 中打开页面而不是片段,)
-
@Prateek 感谢您的评论,没有意识到缺乏清晰度。我根据您的要求进行了编辑并提供了更多解释。
-
@Saamer,如果你想从xamarin.android打开xamarin.form页面,我建议你可以看到同一个帖子:stackoverflow.com/questions/38967324/…。
-
@CherryBu-MSFT 我尝试了 SushiHangover 所说的内容,但该提议的解决方案引发了空引用异常。我也在那里发表了评论。
-
我认为@SushiHangover 是对的。
NavigationPage转换为INavigationPageController并且在渲染器中您可以获取其中的页面(片段)的句柄。我会将其视为FragmentManger而不是Fragment
标签: android xamarin xamarin.forms xamarin.android