如何获取 NavHostFragment
How to get NavHostFragment
-
android
-
android-fragments
-
fragmentmanager
-
android-architecture-components
-
android-architecture-navigation
我正在将 Android 的导航架构组件集成到我的应用程序中。我 运行 在将数据从 activity 传递到片段开头时遇到了一些问题,所以我遵循了这个答案:.
逻辑对我来说似乎很合理,但我正在努力确定如何实际获取 NavHostFragment。 Elliot Shrock 使用了这条线 -
val navHostFragment = navFragment as NavHostFragment
但我还没有找到有效的 Java 等价物。
我尝试通过使用获取我的 navHost 的片段
getSupportFragmentManager().findFragmentById(R.id.[mynavhostid])
但此命令返回空值。有什么想法吗?
我通过首先膨胀包含 NavHost 的视图解决了这个问题,然后使用 supportFragmentManager 获取 navHost 片段并传入我的默认参数。
希望 Google 的 Android 团队在未来为此提供更简洁的解决方案。
这东西对我有用
val navHostFragment = nav_host_fragment as NavHostFragment
请注意,出于某种原因,调试器有时会 return NavHostFragment 为 null,代码实际上可以毫无问题地找到它。我不知道为什么,但它可能占用了我 3 个小时的时间,通过打印或使用片段确保它实际上是空的!
实际上,验证 XML 中的 NavHostFragment id 是否与您在代码中引用的 ID 匹配。
如果您想通过 Fragment 为 NavHost 充气,请在应用程序中使用此代码。
btnClick.setOnClickListener(view -> {
NavHostFragment.findNavController(getParentFragment())
.navigate(R.id.activity_login_to_homeFragment);
}
此代码 ID 必须与 NAVIGATION.XML 文件附件相同。
☻♥ 完成。
因此,尝试使用 Navigation.findNavController(Activity, @IdRes int)
在 Activity 的 onCreate()
中检索 NavController
将会失败。您将必须直接从支持片段管理器中检索它。首先,确保您的 activity 扩展 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
android
android-fragments
fragmentmanager
android-architecture-components
android-architecture-navigation
我正在将 Android 的导航架构组件集成到我的应用程序中。我 运行 在将数据从 activity 传递到片段开头时遇到了一些问题,所以我遵循了这个答案:
逻辑对我来说似乎很合理,但我正在努力确定如何实际获取 NavHostFragment。 Elliot Shrock 使用了这条线 -
val navHostFragment = navFragment as NavHostFragment
但我还没有找到有效的 Java 等价物。
我尝试通过使用获取我的 navHost 的片段
getSupportFragmentManager().findFragmentById(R.id.[mynavhostid])
但此命令返回空值。有什么想法吗?
我通过首先膨胀包含 NavHost 的视图解决了这个问题,然后使用 supportFragmentManager 获取 navHost 片段并传入我的默认参数。
希望 Google 的 Android 团队在未来为此提供更简洁的解决方案。
这东西对我有用
val navHostFragment = nav_host_fragment as NavHostFragment
请注意,出于某种原因,调试器有时会 return NavHostFragment 为 null,代码实际上可以毫无问题地找到它。我不知道为什么,但它可能占用了我 3 个小时的时间,通过打印或使用片段确保它实际上是空的!
实际上,验证 XML 中的 NavHostFragment id 是否与您在代码中引用的 ID 匹配。
如果您想通过 Fragment 为 NavHost 充气,请在应用程序中使用此代码。
btnClick.setOnClickListener(view -> {
NavHostFragment.findNavController(getParentFragment())
.navigate(R.id.activity_login_to_homeFragment);
}
此代码 ID 必须与 NAVIGATION.XML 文件附件相同。
☻♥ 完成。
因此,尝试使用 Navigation.findNavController(Activity, @IdRes int)
在 Activity 的 onCreate()
中检索 NavController
将会失败。您将必须直接从支持片段管理器中检索它。首先,确保您的 activity 扩展 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