更新 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。
补充说明
与其在继承 MvxAndroidSetup
的 Setup
中明确指定 MvxAppCompatViewPresenter
,不如从 MvxAppCompatSetup
继承,后者将自动使用 MvxAppCompatViewPresenter
以及为 MvxAppCompatSetupHelper
.
注册额外的 AndroidViewAssemblies
与支持库相关(参见 link 哪些程序集)和 FillTargetFactories
更新到新的 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。
补充说明
与其在继承 MvxAndroidSetup
的 Setup
中明确指定 MvxAppCompatViewPresenter
,不如从 MvxAppCompatSetup
继承,后者将自动使用 MvxAppCompatViewPresenter
以及为 MvxAppCompatSetupHelper
.
AndroidViewAssemblies
与支持库相关(参见 link 哪些程序集)和 FillTargetFactories