2

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

它从冷启动和恢复后都可以正常工作。但是,在活动被破坏后它将不起作用。

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

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

4

2 回答 2

1

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

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

于 2014-02-12T12:19:10.677 回答
1

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

请看一下这个演示者示例,它显示了在 Android 项目中使用片段的简单实现:https ://github.com/JelleDamen/CustomMvxAndroidPresenter

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

于 2014-02-12T10:19:41.577 回答