加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:48:32 所属栏目:百科 来源:网络整理
导读:我有一个Activity,它在框架布局中托管片段.如果我将显示的片段更改为另一个片段,则片段不会添加到后台,因此使用“后退”按钮会立即关闭应用而不是导航回来(OnBackPressed中的FragmentManager.BackStackEntryCount始终为0) ()-打回来). 在托管片段的“MainAct
我有一个Activity,它在框架布局中托管片段.如果我将显示的片段更改为另一个片段,则片段不会添加到后台,因此使用“后退”按钮会立即关闭应用而不是导航回来(OnBackPressed中的FragmentManager.BackStackEntryCount始终为0) ()-打回来).

在托管片段的“MainActivity”的ViewModel中,我通过ShowViewModel<> -method显示片段:

public class MainViewModel : MvxViewModel
{
    public IMvxCommand ShowHomeCommand
    {
        get { return new MvxCommand(ShowHomeExecuted); }
    }

    private void ShowHomeExecuted()
    {
        ShowViewModel<HomeViewModel>();
    }
}

fragment-class有一个注释,用于将ViewModel分配给host-activity:

[MvxFragment(typeof(MainViewModel),Resource.Id.fragment_container)]
[Register("namespace.of.HomeFragment")]

我在Setup-class中使用默认的AndroidViewPresenter:

protected override IMvxAndroidViewPresenter CreateViewPresenter()
{
   var mvxFragmentsPresenter = new MvxFragmentsPresenter(AndroidViewAssemblies);
   Mvx.RegisterSingleton<IMvxAndroidViewPresenter>(mvxFragmentsPresenter);
   return mvxFragmentsPresenter;
}

我期望在MvxFragment-Attribut或MvxFragment类中有一个参数“AddToBackstack”或类似的东西但是没有这样的东西.我是否遗漏了某些东西,或者目前在MvvmCross 4.0的新片段机制中是否支持后备栈?

解决方法

你可以做的是在你的MainActivity中添加这样的东西:
public override void OnBeforeFragmentChanging (IMvxCachedFragmentInfo fragmentInfo,Android.Support.V4.App.FragmentTransaction transaction)
        {
            var currentFrag = SupportFragmentManager.FindFragmentById (Resource.Id.content_frame) as MvxFragment;

            if(currentFrag != null 
                && fragmentInfo.ViewModelType != typeof(MenuViewModel) 
                && currentFrag.FindAssociatedViewModelType() != fragmentInfo.ViewModelType)
                fragmentInfo.AddToBackStack = true;
            base.OnBeforeFragmentChanging (fragmentInfo,transaction);
        }

这将在导航发生之前将片段添加到backstack.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读