片段和ViewModel

时间:2013-10-25 18:23:28

标签: xamarin.android mvvmcross

我正在尝试在其视图中使用动态创建的片段进行单个活动。 我有一个ActivityViewModel和一个FragmentViewModel以及匹配的视图和布局(ActivityView有一个FrameLayout来托管片段)。通过调用ShowViewModel<>来显示该片段。从ActivityViewModel.Start方法中。 我正在使用http://enginecore.blogspot.ro/2013/06/more-dynamic-android-fragments-with.html中描述的CustomePresenter。

从冷启动和恢复后它可以正常工作。但是,在活动被销毁后它将无法工作。

这是在这个有问题的情况下发生的序列: 创建活动后,Mvx找到一个缓存的ViewModel并将其附加到Activity。由于ViewModel被缓存,因此不会触发Start方法(触发fragement创建)。没关系。但是在下一步中,Android会重新创建片段,但它不会获得其关联的ViewModel,因为无论是CustomPresenter(在创建片段时都会处理它)还是MvxFragment.OnCreate都不会创建它 - 就像MvxActivity机制一样。因此我得到了一个ViewModel-less片段。

所以我想,如果MvxFragemnt像MvxActivity一样创建自己的ViewModel,那么不应该好吗?此外,它应该处理Save,Resume(调用相邻的ViewModel的方法)。 或许我以错误的方式处理这个问题或者遗漏了一些东西。

2 个答案:

答案 0 :(得分:1)

我创建了一个描述相同问题的示例,您正在描述。您可以更改样本,以支持其中包含多个片段的多个区域。这些区域也可用于演示者。

请查看此演示者示例,其中显示了在Android项目中使用片段的简单实现:https://github.com/JelleDamen/CustomMvxAndroidPresenter

供参考: 我使用相同的教程作为灵感。如果您需要任何帮助,请告诉我。

答案 1 :(得分:1)

对不起,你是对的。 在创建具有活动和片段的简单应用程序时,可以重现此行为,然后在“开发人员选项”中选择始终销毁活动。现在切换到另一个应用程序然后切换回来。 不调用Init和Start,从缓存的视图模型获取活动视图模型。 这与片段无关,它与视图模型如何适用于活动有关。

现在,关于片段生命周期以及它没有得到视图模型绑定的事实,正如您所提到的,目前这在Mvvmcross中不可用。