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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |