我有一个共同的布局,我在DrawerLayout
中有一个菜单,这些菜单项取代了Activity
中的可见主片段。顶部菜单项代表我的主屏幕(片段A)。当我在菜单中按下其他内容(片段B)时,我将A替换为B并将事务添加到后栈(A - > B)。如果我从菜单中选择片段C,我希望后面的堆栈现在是A - > C.为了做到这一点,我打电话给popBackStack()
,然后用C替换A.
我的问题是,我希望B和C之间的过渡是平滑的,但是当我调用popBackStack()
时,片段A在被C替换之前会在一瞬间可见。所以我想要的基本上是创建一个FragmentTransaction
,我可以弹出后面的堆栈,而不是在用C替换A之前提交它。
澄清一下:我应该注意到,当你在片段B中时,你可以在那里选择一些会让你更深入的东西,这样堆栈就会变成A - > B - > B1。如果我此时从菜单中按C,我需要清除背板并在此过程中显示C而不闪烁A.
有人知道这是否可行,或者是否有人对我的问题有任何其他解决方案?
答案 0 :(得分:0)
不要在后台堆栈中添加任何片段。只需将一个替换为另一个。通过这种方式,我们将跳过调用popBackStack()。
答案 1 :(得分:0)
不确定您是否已解决此问题,但我一直在开发一个可帮助您解决导航问题的库!
自ChildFragmentManager实现以来,它为我们提供了在单个片段中创建后台堆栈的灵活性。我在图书馆里利用这个。它可以在jcenter存储库中访问,请参阅ReadMe以获取实现细节!
https://github.com/DMCApps/NavigationFragment
基本上,您需要使用SingleStackNavigationManagerFragment
作为基本片段。单击A-> B中的菜单项时,在导航管理器(或FragmentA内)上调用present(B)
。如果要将C添加到堆栈但删除B,则可以调用clearNavigationStackToRoot
。这将清除当前导航堆栈到您添加到管理器(也称为FragmentA)的第一个片段,而不进行任何导航。然后是present(C)
。这将导致clearNavigationStackToRoot
没有动画,但会显示present(C)
的动画。
如果您需要更多说明,我可以为您添加样本到我的存储库。样本越多,人们使用我的图书馆的资源就越多!
我在库的示例应用程序中添加了DrawerClearStackExample包下您需要的示例。
谢谢, DMCApps