来自ViewModel的MvvmCross关闭片段

时间:2016-12-13 12:08:16

标签: android-fragments xamarin.android mvvmcross

我正在写一个Android应用程序。我有一个MainView,它是MvxCachingFragmentCompatActivity类型,它管理片段。在当前显示的片段的ViewModel中,我调用Close(this),以显示先前显示的片段,但没有发生任何事情。

我使用现有的MvxFragmentsPresenter。为了测试,我已经创建了这个演示者的副本,并在调试下检查了ChangePresentation和Close方法是否被调用,并且调用了CloseFragment(viewModel),但没有任何反应。在输出中我看不到任何错误。 仔细尝试后输出:

  

[0:] mvx:诊断:34.91请求演示文稿更改12-13   07:14:01.438 D / Mono(4912):Assembly Ref addref   MvvmCross.Droid.Support.V7.AppCompat [0xe8017220] - >   System.Core [0xdd8db900]:26

目前为了实现所需的行为,我只是在片段视图代码隐藏中调用OnBackPressed(),但我认为这很糟糕:

public override void OnResume()
{
    var closeButton = Activity.FindViewById<Button>(Resource.Id.close_button);
    closeButton.Click += (s, e) =>
    {
        Activity.OnBackPressed();
    };

    base.OnResume();
}

但是在iOS应用中,这种Close方法可以正常工作。

我做错了什么?

2 个答案:

答案 0 :(得分:4)

为了让Close函数对我起作用,我必须将MvxCachingFragmentCompatActivity中的Close方法重写为:

    public override bool Close(IMvxViewModel viewModel)
    {
        CloseFragment(viewModel.GetType().Name, Resource.Id.content_frame);
        Finish();
        return true;
    }

答案 1 :(得分:0)

由于Stupidus的优点,工作关闭方法如下:

public override bool Close(IMvxViewModel viewModel)
{
    OnBackPressed();
    return base.Close(viewModel);
}