更新到新的MvvmCross 5.2
后,我遇到了问题。
我已经强制卸载MvvmCross.Droid.Shared
并在更新所有软件包之后。然后,我在MvxFragment
时出现了一些错误,因此我将其替换为MvxFragmentPresentation
。此外,我将MvxCachingFragmentCompatActivity
替换为MvxAppCompatActivity
,我现在正在使用新的MvxAppCompatViewPresenter
。一切运作良好,应用程序运行良好。除非我在菜单中选择退出,否则我将被带到LoginViewModel
,当我想再次登录时,我收到此错误
片段已经激活。
有人可以帮助我吗?
我的测试项目是github上的HERE。
此处失败,ShowViewModel
public class MainViewModel : BaseViewModel
{
public void ShowMenu()
{
ShowViewModel<MenuViewModel>();
}
}
答案 0 :(得分:0)
问题在于您正在混合使用MvvmCross进行呈现的方法。使用MvvmCross 5.x
,使用IMvxNavigationService
引入了一种新的首选导航方式。对于新应用,建议您使用先前IMvxNavigationService
上的ShowViewModel
。建议您不要混合使用两种不同的导航方式,因为您可能会遇到一些奇怪的行为。
切换到IMvxNavigationService
上已使用的LoginViewModel
将解决您获得的异常。
protected readonly IMvxNavigationService _mvxNavigationService;
public MainViewModel(IMvxNavigationService mvxNavigationService)
{
_mvxNavigationService = mvxNavigationService;
}
public void ShowMenu()
{
_mvxNavigationService.Navigate<MenuViewModel>();
}
此外,您还需要删除向backstack添加HomeFragment
以防止在导航回来时看到白页。
[MvxFragmentPresentation(typeof(MainViewModel), Resource.Id.content_frame)]
public class HomeFragment : BaseFragment<HomeViewModel>
有关更改的完整详情,请参阅pull request。
附加说明
不是明确指定继承MvxAppCompatViewPresenter
的{{1}}中的Setup
,而是可以继承自MvxAppCompatSetup
,MvxAndroidSetup
也会自动使用MvxAppCompatViewPresenter
注册与支持库相关的额外AndroidViewAssemblies
(请参阅哪些程序集的链接)和FillTargetFactories
的{{1}}。