我正在写一个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方法可以正常工作。
我做错了什么?
答案 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);
}