关闭最后一个片段后关闭app

时间:2018-01-03 20:35:48

标签: xamarin.android mvvmcross

我正在用Xamarin.Android和MvvmCross编写应用程序。我正在使用片段并有一个“内容容器”设计,我在content_frame视图中显示片段:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center">
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true" />
</FrameLayout>

一切正常,我可以通过在content_frame中显示/关闭片段来浏览我的应用,但是当我关闭最后一个片段时,它会显示一个空白屏幕,而不是关闭应用。我想我可以在MvxAppCompatViewPresenter课程中解决这个问题,但我不知道怎么办?我目前在我的视图演示者中没有任何内容:

public class ViewPresenter : MvxAppCompatViewPresenter
{
    public ViewPresenter(IEnumerable<Assembly> androidViewAssemblies) : base(androidViewAssemblies)
    {
    }

    public override void Show(MvxViewModelRequest request)
    {
        base.Show(request);

    }

    public override void Close(IMvxViewModel viewModel)
    {
        base.Close(viewModel);
    }
}

这是第一个片段:

[MvxFragmentPresentation(typeof(LoginViewModel), Resource.Id.content_frame, true)]
[Register("myapp.droid.fragments.LoginSelectionFragment")]
public class LoginSelectionFragment : BaseFragment<LoginSelectionViewModel>
{
    protected override int FragmentId => Resource.Layout.fragment_login_selection;
}

1 个答案:

答案 0 :(得分:2)

您可以使用的方法之一是MvxFragmentPresentation属性AddToBackStack设置为{{1},将启动片段的片段添加到Backstack中如果没有传递参数,{false也是默认值。

有一个想法是,对于第一个片段,您将依赖于添加到backstack的活动。从本质上讲,第一个片段和活动可以被认为与背板相同,消除了空白屏幕。

但是,这只有在起始片段不需要添加到backstack时才会起作用,在后面的导航流程中,在相同的活动上下文中。在未来版本的MvvmCross中,您可以通过更新的IMvxOverridePresentationAttribute轻松克服此限制。