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);

Я попробую метод, показанный в другом вопросе, на который вы ссылались.

Другие вопросы по тегам