c# – 如何在MvvmCross 4.0中向backstack添加片段?

前端之家收集整理的这篇文章主要介绍了c# – 如何在MvvmCross 4.0中向backstack添加片段?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Activity,它在框架布局中托管片段.如果我将显示的片段更改为另一个片段,则片段不会添加后台,因此使用“后退”按钮会立即关闭应用而不是导航回来(OnBackPressed中的FragmentManager.BackStackEntryCount始终为0) ()-打回来). @H_404_2@在托管片段的“MainActivity”的viewmodel中,我通过Showviewmodel<> -method显示片段:

  1. public class Mainviewmodel : Mvxviewmodel
  2. {
  3. public IMvxCommand ShowHomeCommand
  4. {
  5. get { return new MvxCommand(ShowHomeExecuted); }
  6. }
  7.  
  8. private void ShowHomeExecuted()
  9. {
  10. Showviewmodel<Homeviewmodel>();
  11. }
  12. }
@H_404_2@fragment-class有一个注释,用于将viewmodel分配给host-activity:

  1. [MvxFragment(typeof(Mainviewmodel),Resource.Id.fragment_container)]
  2. [Register("namespace.of.HomeFragment")]
@H_404_2@我在Setup-class中使用默认的AndroidViewPresenter:

  1. protected override IMvxAndroidViewPresenter CreateViewPresenter()
  2. {
  3. var mvxFragmentsPresenter = new MvxFragmentsPresenter(AndroidViewAssemblies);
  4. Mvx.RegisterSingleton<IMvxAndroidViewPresenter>(mvxFragmentsPresenter);
  5. return mvxFragmentsPresenter;
  6. }
@H_404_2@我期望在MvxFragment-Attribut或MvxFragment类中有一个参数“AddToBackstack”或类似的东西但是没有这样的东西.我是否遗漏了某些东西,或者目前在MvvmCross 4.0的新片段机制中是否支持后备栈?

解决方法

你可以做的是在你的MainActivity中添加这样的东西:
  1. public override void OnBeforeFragmentChanging (IMvxCachedFragmentInfo fragmentInfo,Android.Support.V4.App.FragmentTransaction transaction)
  2. {
  3. var currentFrag = SupportFragmentManager.FindFragmentById (Resource.Id.content_frame) as MvxFragment;
  4.  
  5. if(currentFrag != null
  6. && fragmentInfo.viewmodelType != typeof(Menuviewmodel)
  7. && currentFrag.FindAssociatedviewmodelType() != fragmentInfo.viewmodelType)
  8. fragmentInfo.AddToBackStack = true;
  9. base.OnBeforeFragmentChanging (fragmentInfo,transaction);
  10. }
@H_404_2@这将在导航发生之前将片段添加到backstack.

猜你在找的C#相关文章