关闭最后一个片段后关闭应用程序
Close app after closing last fragment
我正在用 Xamarin.Android 和 MvvmCross 编写应用程序。我正在使用片段并有一个 "content container" 设计,我在 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>
一切正常,我可以通过 showing/closing 我 content_frame
中的片段浏览我的应用程序,但是当我关闭最后一个片段时,它没有关闭应用程序,而是显示空白屏幕反而。我想我可以在 MvxAppCompatViewPresenter
class 中解决这个问题,但我不知道如何解决?目前我的视图演示者中没有任何内容:
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
(如果不传递参数,false
也是默认值)。
想法是,对于第一个片段,您将依赖 activity 添加到后台堆栈。从本质上讲,第一个片段和 activity 可以被认为是相同的关于返回堆栈,消除了空白屏幕。
但是,这仅在不需要将起始片段添加到后台堆栈的情况下才有效,并且在相同的 activity 上下文中,稍后在导航流中。在 MvvmCross 的未来版本中,您可以通过更新的 IMvxOverridePresentationAttribute
.
轻松克服此限制
我正在用 Xamarin.Android 和 MvvmCross 编写应用程序。我正在使用片段并有一个 "content container" 设计,我在 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>
一切正常,我可以通过 showing/closing 我 content_frame
中的片段浏览我的应用程序,但是当我关闭最后一个片段时,它没有关闭应用程序,而是显示空白屏幕反而。我想我可以在 MvxAppCompatViewPresenter
class 中解决这个问题,但我不知道如何解决?目前我的视图演示者中没有任何内容:
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
(如果不传递参数,false
也是默认值)。
想法是,对于第一个片段,您将依赖 activity 添加到后台堆栈。从本质上讲,第一个片段和 activity 可以被认为是相同的关于返回堆栈,消除了空白屏幕。
但是,这仅在不需要将起始片段添加到后台堆栈的情况下才有效,并且在相同的 activity 上下文中,稍后在导航流中。在 MvvmCross 的未来版本中,您可以通过更新的 IMvxOverridePresentationAttribute
.