重新加载主要活动:导航停止工作

时间:2016-07-25 14:32:59

标签: android xamarin xamarin.android mvvmcross

在我的主要活动中,我想重新加载活动,因为我希望应用程序在用户登录后重新加载。 我不知道这是不是一个好主意,但是当我验证用户凭据并在我的主要活动中调用这些代码行时。

var viewGroup = (ViewGroup)
    ((ViewGroup)FindViewById(Android.Resource.Id.Content)).GetChildAt(0);
viewGroup.RemoveAllViews();
Finish();
StartActivity(Intent);

发生的事情是屏幕闪烁,活动再次从头开始加载(看起来并不成熟)。问题是应用程序工作正常但我打电话时导航停止工作

ShowViewModel(SomeViewModel);

我知道我做错了什么,或者可能没有遵循这里的最佳做法。我唯一的目的是重新加载设置标志的应用程序并加载用户配置文件,使用户感觉好像用户已经登录。

版本: 4.1.4

平台: Xamarin Android

1 个答案:

答案 0 :(得分:0)

导航中断是因为您尝试自行处理导航而不是让MvvmCross为您执行此操作。

正如您在default Android presenter中看到的那样,收到Intent的方法不公开。当您致电ShowViewModel时,会调用IMvxAndroidViewModelRequestTranslator的实例(更具体地说,如果您没有覆盖它,则更为this implementation)并为您创建Intent

关于您的问题,我会质疑您是否真的需要重新创建整个视图。如果不这样做,您可以轻松创建MvxPresentationHint的子类,并使用ChangePresentation方法执行您喜欢的操作。这是一个干净且跨平台的解决方案(因为触发演示文稿更改的代码位于共享代码区域)

如果您确实需要重新创建整个视图,则应在需要时使用ViewModel中的ShowViewModel,而不是自行调用StartActivity。我创建了一个帮助方法,如ShowViewModelAndRemoveSelfFromBackstack,以便再次显示您的ViewModel并阻止用户返回旧的。这种行为可以通过使用parameter/presentation 值并在Presenter中相应地处理它们来实现