J'utilise Android Composant de navigation avec navigation inférieure, lint donne un avertissement concernant le remplacement du <fragment>
tag avec FragmentContainerView
, mais lorsqu'il est remplacé findNavController
ne fonctionne pas, cela me donne une erreur sur le fait que NavController n'est pas activé
Fragment
<androidx.fragment.app.FragmentContainerView
Android:id="@+id/nav_Host_fragment"
Android:name="androidx.navigation.fragment.NavHostFragment"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/mobile_navigation" />
Activité
val navController = findNavController(R.id.nav_Host_fragment)
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_classes, R.id.navigation_schedule, R.id.navigation_settings
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
En plus de la réponse acceptée, un petit raccourci qui pourrait être utilisé est:
supportFragmentManager.findFragmentById(R.id.navHostMain)?.findNavController()
Cordialement
Remplacez cette ligne:
NavController navController = Navigation.findNavController(this, R.id.nav_Host_fragment);
avec
NavController navController = getNavController();
Où getNavController()
ressemble à ceci:
// workaround for https://issuetracker.google.com/issues/142847973
@NonNull
private NavController getNavController() {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.nav_Host_fragment);
if (!(fragment instanceof NavHostFragment)) {
throw new IllegalStateException("Activity " + this
+ " does not have a NavHostFragment");
}
return ((NavHostFragment) fragment).getNavController();
}