正确的配置更改处理

时间:2014-07-03 06:36:45

标签: android xamarin xamarin.android mvvmcross

我正在使用MvvmCross编写适用于iOS和Android的跨平台应用。

Android版本使用嵌套的片段。例如,主视图是导航抽屉,其各种导航中心视图是片段,可能是包含其他片段的分割视图,最重要的是,每个视图也可以显示对话框片段。

此外,并非所有ViewModel都通过ShowViewModel()显示,其中一些更像是PropertyChanged事件提供程序,如N=32 video中所示。

这种情况正常,直到配置发生变化(通常是旋转设备)。重新创建片段视图时,它们的视图模型不会被设置为null。这在以下MvvmCross issue #636中暗示,斯图尔特还提到他希望该项目提出一些最佳实践建议。

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

我已经尝试解决上面链接的问题中概述的问题,即通过父ViewModel中的某种形式的ViewModel注册表,以及在保存其实例状态时尝试序列化Fragment的ViewModel,但成效有限。结果充其量只是hackish。问题仍然是片段不知道如何在MvvmCross中重新创建其视图模型。哦,禁用设备轮换时的配置更改不算作答案。 ; - )

1 个答案:

答案 0 :(得分:0)

显然,这个答案不是你问题的直接答案,但我觉得这个问题足以在这里提及。

在我的Android应用中,我开始将Controller(或MVA样式Adapter)注入View / Fragment / {{1}使用Activity依赖注入库。这具有维护Dagger类实例的关键属性,因此在旋转/配置更改时,重新注入相同的Controller

似乎Controller应该能够理想地执行此操作,否则您将度过难关。如果它没有在您的视图类和Mvx.Resolve()类之间引入中间层缓存,那么对我来说似乎是唯一的选择。但这是我读到关于Xamarin的第一个小时左右,所以我可能不合时宜。我已经成为Android开发者已有5年了,但我只想加上我的2便士:)