Tengo curiosidad por un problema que tengo con el componente de navegación, específicamente en el alojamiento NavHostFragment. Tengo una aplicación nativa de actividad única con algunos fragmentos. Estoy en el xml del lanzador, reemplazando <fragment> con <androidx.fragment.app.FragmentContainerView>.

La implementación inicial ha funcionado según lo previsto durante un año. Si bien presentamos FragmentContainerView esta semana, la pantalla del destino inicial no se muestra en el lanzamiento. Sin embargo, observo registros que prueban que los datos ingresados ​​correctamente desde la red y la caché. Desde este estado, solo desencadenar el cambio de configuración girando el dispositivo muestra la interfaz de usuario como se esperaba.

Mis dependencias AndroidX NavigationFragmentKtx y NavigationUiKtx son la versión 2.3.2. Archivos relevantes abreviados. ¿Se destaca algo que me haya perdido? Se agradece cualquier pensamiento.

launcher_activity.xml

<androidx.fragment.app.FragmentContainerView
        android:id="@+id/launcher_navHost"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/nav_graph" />

LauncherActivity.kt

class LauncherActivity : AppCompatActivity(R.layout.launcher_activity) {
    private lateinit var viewBinding: LauncherActivityBinding
    
    private val navController: NavController by lazy {
        val navHost = supportFragmentManager.findFragmentById(
            R.id.launcher_navHost
        ) as NavHostFragment
        navHost.navController
    }
        
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        viewBinding = LauncherActivityBinding.inflate(layoutInflater)
        setContentView(viewBinding.root)
    }
}
0
es0329 20 ene. 2021 a las 07:46

1 respuesta

La mejor respuesta

Estás usando AppCompatActivity(R.layout.launcher_activity), lo que significa que estás llamando automáticamente a setContentView(R.layout.launcher_activity) como parte de super.onCreate(savedInstanceState) (eso es lo que hace pasar un ID de diseño). Luego, anula ese diseño con una segunda llamada a setContentView().

Simplemente puede eliminar la parte R.layout.launcher_activity si está usando View Binding, ya que no es necesaria (y la raíz de su problema):

class LauncherActivity : AppCompatActivity() {
1
ianhanniballake 20 ene. 2021 a las 05:52