更新MvvmCross 5.2后,我的错误片段已经激活

时间:2017-09-26 07:17:52

标签: android android-fragments xamarin xamarin.android mvvmcross

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

我已经强制卸载MvvmCross.Droid.Shared并在更新所有软件包之后。然后,我在MvxFragment时出现了一些错误,因此我将其替换为MvxFragmentPresentation。此外,我将MvxCachingFragmentCompatActivity替换为MvxAppCompatActivity,我现在正在使用新的MvxAppCompatViewPresenter。一切运作良好,应用程序运行良好。除非我在菜单中选择退出,否则我将被带到LoginViewModel,当我想再次登录时,我收到此错误

  

片段已经激活。

有人可以帮助我吗?

我的测试项目是github上的HERE

此处失败,ShowViewModel

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

1 个答案:

答案 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,而是可以继承自MvxAppCompatSetupMvxAndroidSetup也会自动使用MvxAppCompatViewPresenter注册与支持库相关的额外AndroidViewAssemblies(请参阅哪些程序集的链接)和FillTargetFactories的{​​{1}}。