【问题标题】:How to get NavHostFragment如何获取 NavHostFragment
【发布时间】:2018-11-25 19:25:04
【问题描述】:

我正在将 Android 的导航架构组件集成到我的应用中。我在将数据从活动传递到片段开头时遇到了一些问题,所以我遵循了这个答案:Navigation Architecture Component- Passing argument data to the startDestination

逻辑对我来说似乎是合理的,但我正在努力确定如何实际获取 NavHostFragment。 Elliot Shrock 使用了这条线 -

val navHostFragment = navFragment as NavHostFragment

但我还没有找到有效的 Java 等效项。 我尝试通过使用获取我的 navHost 的片段 getSupportFragmentManager().findFragmentById(R.id.[mynavhostid])

但此命令返回 null。有什么想法吗?

【问题讨论】:

  • val navHostFragment = navFragment as NavHostFragment 相当于NavHostFragment navHostFragment = (NavHostFragment) findViewById(R.id.navFragment)

标签: android android-fragments android-architecture-components fragmentmanager android-architecture-navigation


【解决方案1】:

我解决了这个问题,首先膨胀包含 NavHost 的视图,然后使用 supportFragmentManager 获取 navHost 片段并传入我的默认参数。

希望 Google 的 Android 团队在未来为此提供更简洁的解决方案。

【讨论】:

    【解决方案2】:

    这东西对我有用

     val navHostFragment = nav_host_fragment as NavHostFragment
    

    【讨论】:

      【解决方案3】:

      注意,由于某种原因,调试器有时会为 NavHostFragment 返回 null,而代码实际上可以毫无问题地找到它。我不知道为什么,但它可能占用了我 3 个小时的时间,通过打印或使用片段确保它实际上是 null!

      【讨论】:

        【解决方案4】:

        实际上,验证 XML 中的 NavHostFragement id 是否与您在代码中引用的匹配。

        【讨论】:

          【解决方案5】:

          如果您想通过 Fragment 为 NavHost 充气,请在应用程序中使用此代码。

          btnClick.setOnClickListener(view -> {
                    NavHostFragment.findNavController(getParentFragment())
                          .navigate(R.id.activity_login_to_homeFragment); 
                 }
          

          此代码上的 ID 必须与 NAVIGATION.XML 文件附件相同。

          ☻♥完成。

          【讨论】:

            【解决方案6】:

            因此,尝试使用Navigation.findNavController(Activity, @IdRes int) 检索活动的onCreate() 中的NavController 将失败。您必须直接从支持片段管理器中检索它。首先,确保您的活动扩展AppCompatActivity。否则,您将无法使用getSupportFragmentManager()。然后,这段代码应该可以工作了:

            NavHostFragment navHostFragment =
                                (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
            NavController navController = navHostFragment.getNavController();
            

            延伸阅读:https://developer.android.com/guide/navigation/navigation-getting-started

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-07-04
              • 2018-10-30
              • 1970-01-01
              • 2020-03-01
              • 1970-01-01
              • 2018-11-14
              • 2020-12-31
              • 1970-01-01
              相关资源
              最近更新 更多