Android 正确的配置更改处理

Android 正确的配置更改处理,android,xamarin,xamarin.android,mvvmcross,Android,Xamarin,Xamarin.android,Mvvmcross,我正在使用MvvmCross为iOS和Android编写一个跨平台应用程序 Android版本使用嵌套片段。例如,主视图是一个导航抽屉,它的各种导航中心视图是片段,这些片段可能是包含其他片段的拆分视图,除此之外,每个视图还可能显示一个对话框片段 此外,并非所有的ViewModel都是通过ShowViewModel()显示的,其中一些模型的使用更像中演示的PropertyChanged事件提供程序 在发生配置更改(通常是旋转设备)之前,此功能正常工作。当片段视图被重新创建时,它们的视图模型不会被创

我正在使用MvvmCross为iOS和Android编写一个跨平台应用程序

Android版本使用嵌套片段。例如,主视图是一个导航抽屉,它的各种导航中心视图是片段,这些片段可能是包含其他片段的拆分视图,除此之外,每个视图还可能显示一个对话框片段

此外,并非所有的ViewModel都是通过ShowViewModel()显示的,其中一些模型的使用更像中演示的PropertyChanged事件提供程序

在发生配置更改(通常是旋转设备)之前,此功能正常工作。当片段视图被重新创建时,它们的视图模型不会被创建,并且被设置为null。这一点在下文中有所暗示,Stuart还提到他希望该项目提出一些最佳实践建议

我现在的问题是,这方面的最佳做法是什么?如果您必须正确支持MvvmCross中的Android配置更改,您会怎么做


我已经尝试解决上面链接的问题中所述的问题,即通过父ViewModels中某种形式的ViewModel注册表,以及在保存片段的实例状态时尝试序列化片段的ViewModel,但成功率有限。结果充其量也让人感觉不太正常。问题在于片段不知道如何在MvvmCross中重新创建其视图模型。哦,在设备旋转时禁用配置更改不算作答案。;-)

显然,这个答案并不是对你问题的直接回答,但我觉得在这里提到它已经足够相关了

在我的android应用程序中,我已经开始使用依赖注入库将
控制器
(或
MVA
样式
适配器
)注入
视图
/
片段
/
活动
)。这具有维护
Controller
类实例的关键属性,因此在旋转/配置更改时,将重新注入相同的
Controller

看起来,
Mvx.Resolve()
应该能够在理想情况下执行此操作,否则您将度过一段不愉快的时光。如果它没有在视图类和
Mvx
类之间引入中间层缓存,那么对我来说似乎是唯一的选择。但这是我第一个小时左右阅读有关Xamarin的文章,所以我可能有点离题。我已经做了5年的安卓开发人员,所以我想我会加上2便士:)