我正在慢慢将我的应用迁移到Android上的MvvmCross。我尚未将所有活动转换为ViewModels。因此,我需要从Mvvm控制的Activity导航到常规Activity。为此,我创建了自己的Presenter并拦截了Show方法并完成了自己的StartActivity。这似乎有效。但是,现在我需要转向另一个方向,让我的常规活动回到最初的Mvvm控制的Activity。我尝试使用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控制活动?
答案 0 :(得分:2)
...简单
要从任何标准Android Activity
返回,您只需要Activity
关闭Finish()
但除此之外......
如果您想转发MvvmCross View
,那么您需要了解一些关于MvvmCross内部的内容:特别是关于MvvmCross导航在概念上如何在ViewModels
之间而不是{{1}之间发生}},Activities
或Pages
。
如果您想转发新的UIViewControllers
,那么您可以使用ViewModel
单身人士执行此操作 - 如何执行此操作显示在Show view from non-view/viewmodel in mvvmcross
如果您以后想要从当前IMvxViewDispatcher
返回,那么您可以尝试在ViewModel
内调用Close(this)
- 默认情况下,在Android上这将映射到{{1触摸到ViewModel
,在WpDev上转到Finish()
答案 1 :(得分: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);
我将尝试您引用的其他问题中显示的方法。