我有一个片段,按下后退按钮时不应该导航回来。
我的活动继承自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。
如何防止我的片段被添加到后台?
答案 0 :(得分:0)
如果您在First Fragment
之后导航到的片段将AddToBackStack
设置为true
,则会遇到此行为。虽然First Fragment
没有被添加到后台,但是持有它的活动正在被添加。
因此,当您导航到Second Fragment
时,您的背包中实际上有2个项目,Activity
和Second Fragment
。从Second Fragment
向后导航将返回Activity
中之前显示的片段,在本例中为First Fragment
。
要解决此问题,您可以在AddToBackStack
上将false
设置为Second Fragment
,这意味着它的后退导航将落在Activity
的导航范围之内