更新到新的 MvvmCross5.2
后出现问题。
我已经强制卸载MvvmCross.Droid.Shared
并在更新所有软件包后。然后我在MvxFragment
上遇到了一些错误,所以我用MvxFragmentPresentation
替换了它。此外,我用MvxAppCompatActivity
替换了MvxCachingFragmentCompatActivity
,我现在正在使用新的MvxAppCompatViewPresenter
。一切正常,应用程序运行良好。除了在菜单中选择注销后,我会被带到LoginViewModel
,当我想再次登录时,我收到此错误
片段已处于活动状态。
有人可以帮助我吗?
我的测试项目在github上。
它在这里失败了,ShowViewModel
public class MainViewModel : BaseViewModel
{
public void ShowMenu()
{
ShowViewModel<MenuViewModel>();
}
}
问题是您正在混合使用在 MvvmCross 中呈现的方法。随着 MvvmCross5.x
引入了一种新的首选导航方式,使用IMvxNavigationService
.对于新应用程序,建议您宁愿使用IMvxNavigationService
而不是以前的ShowViewModel
。建议您不要混合使用两种不同的导航方式,因为您可能会遇到一些奇怪的行为。
切换到已经在LoginViewModel
上使用的IMvxNavigationService
将解决您得到的异常。
protected readonly IMvxNavigationService _mvxNavigationService;
public MainViewModel(IMvxNavigationService mvxNavigationService)
{
_mvxNavigationService = mvxNavigationService;
}
public void ShowMenu()
{
_mvxNavigationService.Navigate<MenuViewModel>();
}
此外,还需要删除向后退堆栈添加HomeFragment
,以防止在向后导航时看到白页。
[MvxFragmentPresentation(typeof(MainViewModel), Resource.Id.content_frame)]
public class HomeFragment : BaseFragment<HomeViewModel>
有关更改的完整详细信息,请参阅拉取请求。
其他说明
与其在继承MvxAndroidSetup
的Setup
中显式指定MvxAppCompatViewPresenter
,不如从MvxAppCompatSetup
继承,这将自动使用该MvxAppCompatViewPresenter
,并为MvxAppCompatSetupHelper
注册与支持库相关的其他AndroidViewAssemblies
(请参阅指向哪些程序集的链接)和FillTargetFactories
。