更新 MvvmCross 5.2 后,我的错误片段已经处于活动状态



更新到新的 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>

有关更改的完整详细信息,请参阅拉取请求。


其他说明

与其在继承MvxAndroidSetupSetup中显式指定MvxAppCompatViewPresenter,不如从MvxAppCompatSetup继承,这将自动使用该MvxAppCompatViewPresenter,并为MvxAppCompatSetupHelper注册与支持库相关的其他AndroidViewAssemblies(请参阅指向哪些程序集的链接)和FillTargetFactories

最新更新