Reemplazar etiquetas de fragmentos con FragmentContainerView provoca errores de tiempo de ejecución | Autor: Vincent Tsen | Diciembre de 2021

Porque no puede encontrar el controlador de navegación en su clase de actividad.


Ha definido fragmentos en el archivo xml de diseño de actividad principal.
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/nav_graph" />
Android Studio te da la siguiente advertencia.
Reemplace la etiqueta con FragmentContainerView.
Lo reemplazas con 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/nav_graph" />
Entonces, puede construir con éxito el proyecto. Sin embargo, cuando lo ejecuta, su aplicación se bloqueará con el siguiente error de tiempo de ejecución.
Causado por: java.lang.IllegalStateException: Activity com.udacity.shoestore.ui.MainActivity@f2c4e66 No NavController está configurado en 2131362101 de androidx.navigation.Navigation.findNavController (Navigation.java:61)
findNavController()
Ya no aplica a sus cursos de actividad.Primero necesitas encontrar el fragmento, usa supportFragmentManager.findFragmentById()
Accede al controlador de navegación.
private val navController by lazy {
findNavController(R.id.nav_host_fragment)
}
private val navController by lazy {
val navHostFragment = supportFragmentManager
.findFragmentById(R.id.nav_host_fragment) as NavHostFragmentnavHostFragment.navController
}
No estoy seguro por qué FragmentContainerView
Debería usarse, incluso después de leer la documentación.Personalmente, desde el punto de vista del usuario, prefiero usar
Etiqueta porque usa menos código para encontrar el controlador de navegación. ¡La aplicación también funciona muy bien!
Además, el proyecto de plantilla predeterminado de Android Studio no se utiliza
Si esta es la forma recomendada, ¿cuál debería ser?