如何使用MvxFragment MvxCachingFragmentCompatActivity禁用BackStack

时间:2016-09-21 01:43:20

标签: android-fragments xamarin mvvmcross

我有一个片段,按下后退按钮时不应该导航回来。

我的活动继承自MvxCachingFragmentCompatActivity

My Fragment继承自MvxFragment,它在类上方的MvxFragmentAttribute中将AddToBackStack设置为false,如下所示:

[MvxFragment(typeof(MainViewModel), Resource.Id.main_frame_layout, false)]
[Register("myproject.droid.fragments.MyFragment ")]
public class MyFragment : MvxFragment<MyViewModel>
{

然而,当我导航到它然后到我的下一个框架并按下后退按钮然后它导航回到它,即使AddToBackStack为假。

可以在此处找到MvxCachingFragmentCompatActivity的代码:https://github.com/MvvmCross/MvvmCross-AndroidSupport/blob/master/MvvmCross.Droid.Support.V7.AppCompat/MvxCachingFragmentCompatActivity.cs

它似乎在ShowFragment方法(第234行)中做了正确的事情:

if ((currentFragment != null && fragInfo.AddToBackStack) || forceAddToBackStack)
{
    ft.AddToBackStack(fragInfo.Tag);
}

在forceAddToBackStack设置为true的情况下不调用ShowFragment。

如何防止我的片段被添加到后台?

1 个答案:

答案 0 :(得分:0)

如果您在First Fragment之后导航到的片段将AddToBackStack设置为true,则会遇到此行为。虽然First Fragment没有被添加到后台,但是持有它的活动正在被添加。

因此,当您导航到Second Fragment时,您的背包中实际上有2个项目,ActivitySecond Fragment。从Second Fragment向后导航将返回Activity中之前显示的片段,在本例中为First Fragment

要解决此问题,您可以在AddToBackStack上将false设置为Second Fragment,这意味着它的后退导航将落在Activity的导航范围之内