【问题标题】:How to perform custom navigation?如何执行自定义导航?
【发布时间】:2019-05-23 07:43:18
【问题描述】:

我尝试使用称为导航的新架构组件。与使用 FragmentManager 相比,这非常令人兴奋并且代码更少。现在,我最终遇到了一个有 5 个导航片段的情况,如下所示:

A -> B -> C -> D -> E

有时我必须将用户从片段 A 直接移动到 E,如果按下后退按钮,我想要这样的东西:

E -> D -> C -> B -> A

但我现在得到的是:

E -> A

有什么可行的方法可以实现吗?

【问题讨论】:

    标签: android android-jetpack android-navigation android-architecture-navigation


    【解决方案1】:

    好的!如果你想从E -> A 去,那么你需要从fragmentManagerpop 一些fragments。所以,你需要这样做:

    var size = fragmentManager!!.backStackEntryCount
    var fm: FragmentManager = fragmentManager as FragmentManager
    for (i in 0..(size - 1)) {
        fm.popBackStack()
    }
    

    在您的backPressed 活动中。

    【讨论】:

      【解决方案2】:

      如果您现在想返回时直接从 E->D 移动,请检查 Fragment 是否已经存在于 backstack 中,如果存在则移动到该片段,否则再次打开。为此

      您可以使用 findFragmentByTag() 或 findFragmentById() 函数来获取片段。如果提到的方法返回 null 则该片段不存在。

      Fragment fragmentA = fragmentManager.findFragmentByTag("frag1");
      if (fragmentA == null) {
          //not exist
      }
      else{
         //fragment exist
      }
      

      在你的其他场景中,你去 A->B->C->D 然后想要弹出多个片段,那么你可以在 java 中这样做

       for (int i=0;i<fragmentManager.backStackEntryCount;i++) { // or change the many fragments you want to pop.
           fragmentManager.popBackStack();
       }
      

      【讨论】:

        猜你喜欢
        • 2018-06-01
        • 2018-04-17
        • 1970-01-01
        • 2012-12-12
        • 2015-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多