1

我正在慢慢地将我的应用程序迁移到 Android 上的 MvvmCross。我还没有将所有活动转换为 ViewModel。因此,我需要从 Mvvm 控制的 Activity 导航到常规 Activity。为此,我制作了自己的 Presenter 并截取了 Show 方法并做了自己的 StartActivity。这似乎奏效了。但是,现在我需要转向另一个方向,让我的常规活动回到原来的 Mvvm 控制的活动。我尝试使用 CLEAR_TOP 标志在 ViewModel 上执行 StartActivity,但出现错误:

"Null Extras seen on Intent when creating ViewModel - this should not happen - have you tried to navigate to an MvvmCross View directly?"

如何从常规活动返回到原始 Mvvm 控制的活动?

4

2 回答 2

2

简单的...

要从任何标准 Android 返回Activity,您只需Activity使用Finish()


但除此之外...

相反,如果您想继续使用 MvvmCross View,那么您需要了解一点 MvvmCross 的内部结构:特别是关于 MvvmCross 导航在概念上是如何发生在 betweenViewModels而不是 between Activities, PagesorUIViewControllers的。

如果您想前进到一个新的ViewModel,那么您可以使用IMvxViewDispatcher单例执行此操作 - 如何执行此操作显示在 mvvmcross 中的非视图/视图模型的显示视图中

如果您稍后想从当前返回ViewModel,那么您可以尝试Close(this)ViewModel- 默认情况下调用,在 Android 上,这将映射到Finish(),在 Touch 上到PopViewController,在 WpDev 上到GoBack()

于 2013-05-23T16:30:25.897 回答
0

这似乎可行,但由于我使用了一个特殊的字符串“MvxLaunchData”,所以这是一个黑客行为。

Intent i = new Intent(this,typeof(LoginView));
i.AddFlags(ActivityFlags.ClearTop);
var converter = Mvx.Resolve<IMvxNavigationSerializer> ();
MvxViewModelRequest request = MvxViewModelRequest.GetDefaultRequest (typeof(LoginViewModel));
i.PutExtra ("MvxLaunchData", converter.Serializer.SerializeObject(request));
StartActivity(i);

我将尝试您引用的另一个问题中显示的方法。

于 2013-05-23T18:47:31.837 回答