我正在用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;
}
您可以使用的方法之一是不将通过将MvxFragmentPresentation
属性AddToBackStack
设置为false
而将启动片段的片段添加到backstack(如果没有传递参数,则false
也是默认值)。
这样的想法是,对于第一个片段,您将依赖于添加到Backstack的活动。从本质上讲,第一个片段和活动可以被认为与背板相同,消除了空白屏幕。
但是,这只有在起始片段不需要添加到backstack时才会起作用,在后面的导航流程中,在相同的活动上下文中。在MvvmCross的未来版本中,您可以通过更新的IMvxOverridePresentationAttribute
轻松克服此限制。