我有一个在框架布局中托管 fragment 的 Activity 。如果我将显示的 fragment 更改为另一个 fragment , fragment 不会添加到后退堆栈中,因此使用“后退”按钮将立即关闭应用程序而不是返回(FragmentManager.BackStackEntryCount 在 OnBackPressed 中始终为 0 ()-回调).
在托管 fragment 的“MainActivity”的 ViewModel 中,我通过 ShowViewModel<>-方法显示 fragment :
public class MainViewModel : MvxViewModel
{
public IMvxCommand ShowHomeCommand
{
get { return new MvxCommand(ShowHomeExecuted); }
}
private void ShowHomeExecuted()
{
ShowViewModel<HomeViewModel>();
}
}
fragment 类有一个注释来将 ViewModel 分配给宿主 Activity :
[MvxFragment(typeof(MainViewModel), Resource.Id.fragment_container)]
[Register("namespace.of.HomeFragment")]
我在安装类中使用默认的 AndroidViewPresenter:
protected override IMvxAndroidViewPresenter CreateViewPresenter()
{
var mvxFragmentsPresenter = new MvxFragmentsPresenter(AndroidViewAssemblies);
Mvx.RegisterSingleton<IMvxAndroidViewPresenter>(mvxFragmentsPresenter);
return mvxFragmentsPresenter;
}
我希望在 MvxFragment-Attribut 或 MvxFragment-class 中有一个参数“AddToBackstack”或类似参数,但没有这样的东西。我是否错过了什么,或者目前是否不支持 MvvmCross 4.0 中的新 fragment 机制中的返回堆栈?
最佳答案
你可以做的是在你的 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);
}
这会在导航发生之前将 fragment 添加到后台堆栈。
关于c# - 如何在 MvvmCross 4.0 中将 fragment 添加到后台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36114143/