MvvmCross: Как перейти от обычного представления к Mvvm viewmodel на Android?
Я медленно перевожу свое приложение на MvvmCross на Android. Я еще не перевел все действия в ViewModels. Поэтому мне нужно перейти от Mvvm-контролируемой активности к обычной активности. Чтобы сделать это, я сделал свой собственный Presenter, перехватил метод Show и сделал свой собственный StartActivity. Это, казалось, сработало. Тем не менее, теперь мне нужно пойти в другом направлении, и моя обычная активность вернется к исходной активности, контролируемой Mvvm. Я попытался просто выполнить StartActivity для ViewModel с помощью флага CLEAR_TOP, но я получил ошибку:
"Null Extras seen on Intent when creating ViewModel - this should not happen - have you tried to navigate to an MvvmCross View directly?"
Как я могу вернуться к первоначальной активности, контролируемой Mvvm, из обычной активности?
2 ответа
Просто...
Чтобы вернуться с любого стандартного Android Activity
Вы можете просто спросить Activity
закрыть используя Finish()
Но помимо этого...
Если вместо этого вы хотите пойти вперед на MvvmCross View
, тогда вам нужно немного узнать о внутренностях MvvmCross: в частности, о том, как концептуально происходит навигация MvvmCross между ViewModels
а не между Activities
, Pages
или же UIViewControllers
,
Если вы хотите перейти к новому ViewModel
, то вы можете сделать это с помощью IMvxViewDispatcher
Singleton - как это сделать, показано в Показать представление из non-view / viewmodel в mvvmcross
Если вы потом захотите вернуться из текущего ViewModel
тогда вы можете попробовать позвонить Close(this)
в пределах ViewModel
- по умолчанию в Android это будет отображаться на Finish()
на ощупь, чтобы PopViewController
, на WpDev, чтобы GoBack()
Это, кажется, работает, но это взлом, так как я использую специальную строку "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);
Я попробую метод, показанный в другом вопросе, на который вы ссылались.