更新 MvvmCross 5.2 后我有错误 Fragment already active

After updating MvvmCross 5.2 I have error Fragment already active

更新到新的 MvvmCross 5.2 后我遇到了问题。

我已强制卸载 MvvmCross.Droid.Shared 并在更新所有软件包后。然后 MvxFragment 出现了一些错误,所以我用 MvxFragmentPresentation 替换了它。此外,我将 MvxCachingFragmentCompatActivity 替换为 MvxAppCompatActivity,现在我正在使用新的 MvxAppCompatViewPresenter。一切正常,应用程序 运行 也很好。除了我 select 在菜单中注销后,我被带到 LoginViewModel 并且当我想要再次登录时,我收到此错误

Fragment already active.

有人可以帮助我吗?

我的测试项目是 HERE github。

这里失败了,ShowViewModel

   public class MainViewModel : BaseViewModel
    {
        public void ShowMenu()
        {
            ShowViewModel<MenuViewModel>();
        }
    }

问题是您在 MvvmCross 中混合了呈现方法。在 MvvmCross 5.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>

有关更改的完整详细信息,请参阅 pull request


补充说明

与其在继承 MvxAndroidSetupSetup 中明确指定 MvxAppCompatViewPresenter,不如从 MvxAppCompatSetup 继承,后者将自动使用 MvxAppCompatViewPresenter以及为 MvxAppCompatSetupHelper.

注册额外的 AndroidViewAssemblies 与支持库相关(参见 link 哪些程序集)和 FillTargetFactories