xamarin - 将 MvvmCross 从 6.3.1 升级到 7.1.2 时,使用 MvxPopRecursivePresentationHint(levelsDeep: 2) 不再呈现 View
问题描述
我们已将 Xamarin Forms iOS/Android 项目 + 核心从 MvvmCross 6.3.1 升级到 7.1.2,但我们遇到了问题。
我们有 4 个 ViewModel -
A B C D
我已经从 A 导航到 B,然后从 B 导航到 C,然后从 C 导航到 D -
A -> B -> C -> D
B、C 和 D 视图具有标准属性 -
[MvxContentPagePresentation(WrapInNavigationPage = true)]
在 D 视图中,我点击“完成”按钮并返回 B 我们使用 -
var presentationHint = new MvxPopRecursivePresentationHint(levelsDeep: 2);
await NavigationService.ChangePresentation(presentationHint);
这曾经在 6.3.1 中工作,但在 7.1.2 中,当它导航回 B 时,屏幕为空白,XAML 未呈现。它确实导航回 B,我们在 B 的 ViewAppeared 中放置了一个断点。
奇怪的是,当它导航回 B 时,我们可以在空白屏幕上点击一个按钮导航到 C,然后它导航到 C。然后如果我们点击返回(顶部的 Android 后退按钮,而不是底部/设备),它确实导航回 B 并且视图也正确显示,XAML 被渲染。
此外,这并不总是发生 - 有时在导航回 B 时它会正确呈现 B 视图。我们已经在 Android 上重现了这个问题,无论是在金属上发布还是在 Android 模拟器上调试。在 iOS 上它始终有效。
同样的问题发生在 -
await NavigationService.ChangePresentation(new MvxPopPresentationHint(typeof(B)));
这确实有效并导航回 A 并呈现 A 视图 -
var presentationHint = new MvxPopToRootPresentationHint();
await NavigationService.ChangePresentation(presentationHint);
但有时我们需要导航回 B 或 C,而不是一直回到根 A。
在https://www.mvvmcross.com/mvvmcross-7.1.0-release/中,我确实看到“这是次要版本,主要包含错误修复和围绕 Android 和 iOS 演示者代码的代码清理。” - 但如果我们遇到上述问题,我还没有找到任何关于升级到 7.1.2 后我们需要做什么的具体步骤。
很难提供一个示例项目,所以在花时间这样做之前,我想知道是否有人知道问题可能是什么。
从 6.3.1 到 7.1.2 是否发生了一些变化,这需要我们改变如何使用 MvxPopRecursivePresentationHint(levelsDeep: 2) 从 D 导航回 B 以便渲染 B 视图?
这也可能与 MvvmCross 没有任何关系,但我们的 Android 项目存在一些问题,因为我们升级到 AndroidX 仍在 Xamarin Forms 4.8 上 - 有人有任何提示或解决方法建议吗?
解决方案
经过大量的谷歌搜索和堆栈溢出,并尝试了许多不同的东西,我们偶然发现了这个:
https://forums.xamarin.com/discussion/51782/navigation-popasync-true-shows-blank-page
然后我们找到了一种解决方法,在 B、C 和 D 视图上,我们从 -
[MvxContentPagePresentation(WrapInNavigationPage = true)]
public partial class BPage : MvxContentPage<BViewModel>
至 -
[MvxContentPagePresentation(WrapInNavigationPage = true, Animated = false))]
public partial class BPage : MvxContentPage<BViewModel>
添加“Animated = false” - 这解决了问题!现在在 D 中执行此操作时 -
var presentationHint = new MvxPopRecursivePresentationHint(levelsDeep: 2);
await NavigationService.ChangePresentation(presentationHint);
B 视图不再为空白,屏幕已正确渲染。
推荐阅读
- javascript - 在 React、Redux-Form 和 GraphQL 中选择输入中的 onChange 事件从数据库中查询
- r - R合并部分匹配
- c# - 如何使用计划任务打印文件
- spring-boot - Camel 不会终止具有最大空闲秒数属性的 Java 进程(Spring-Boot)
- reactjs - 来自 AntDesign 表单的验证不适用于 onChange
- c++ - REDHAWK IDE 生成的端口类型 frontend::OutDigitalScanningTunerPort 在哪里定义?
- node.js - 在 Firebase 中处理大量数据或如何避免“在哪里”限制?
- flutter - 如何删除文本字段中图标和文本之间的间距 - Flutter?
- sas - 如何计算分类数据的 95% 置信区间(每日、偶尔、从不)
- oracle-apex - 使用 APEX_ERROR.ADD_ERROR 与 RAISE_APPLICATION_ERROR