c# - 如何在 MvvmCross 4.0 中将 fragment 添加到后台?

标签 c# android xamarin mvvmcross

我有一个在框架布局中托管 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/

相关文章:

c# - 在不创建页面的新实例的情况下在同一 Window WPF 中切换 View

c# - 为什么在发出通过值类型泛型相互引用的类时会出现此异常?

c# - 将 Html 呈现或转换为 'formatted' 文本 (.NET)

c# - LINQ 语句是否比 'foreach' 循环更快?

java - 如何将当前时间与Android中存储在数据库中的时间进行比较

安卓字符串颜色

android - 生成的 APK 的 SHA1 指纹与 Keystore 的指纹不匹配

c# - 尝试将项目添加到列表时 Foreach 循环中断

c# - curl 后 Xamarin C#

xamarin - Visual Studio 2015 + Xamarin > 在运行应用程序之前选择一个有效的设备