9

我正在将 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。有任何想法吗?

4

6 回答 6

5

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

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

于 2018-06-19T00:29:52.810 回答
2

这东西对我有用

 val navHostFragment = nav_host_fragment as NavHostFragment
于 2019-06-15T11:24:54.700 回答
1

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

在此处输入图像描述

于 2020-06-09T15:34:55.307 回答
0

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

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

进一步阅读:https ://developer.android.com/guide/navigation/navigation-getting-started

于 2021-12-22T22:12:37.123 回答
0

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

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

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

☻♥ 完成。

于 2021-10-13T07:34:06.843 回答
0

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

于 2020-10-14T21:17:53.800 回答