es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se está obteniendo el ID de fragmento actual utilizando navController.currentDestination?.id

Tengo una actividad con un botón y debajo de eso tengo un fragmento navhost con 3 fragmentos.
Pero cuando hago clic en el botón, no sucede nada, creo que es porque no se está obteniendo el ID del fragmento.
Aquí está mi código:
“`class MainActivity: AppCompatActivity() {

<pre><code>private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root

setContentView(view)
val navHostFragment = supportFragmentManager.findFragmentById(R.id.navHost) as NavHostFragment
val navController = navHostFragment.navController
val id = navController.currentDestination?.id

binding.myButton.setOnClickListener {
if (id == R.id.firstFragment) {
navController.navigate(R.id.goto_secondFragment)
}
if (id == R.id.secondFragment) {
navController.navigate(R.id.goto_thirdFragment)
}
}
}
</code></pre>

}“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema mencionado podría deberse a que id podría ser nulo. Aquí está cómo puedes modificar el código para asegurarte de que se obtiene el fragmento id correcto:

    class MainActivity: AppCompatActivity() {
    
        private lateinit var binding: ActivityMainBinding
    
        override fun onCreate(savedInstanceState: Bundle?) {
           super.onCreate(savedInstanceState)
           binding = ActivityMainBinding.inflate(layoutInflater)
           val view = binding.root
           setContentView(view)
    
           val navHostFragment =
               supportFragmentManager.findFragmentById(R.id.navHost) as NavHostFragment
           val navController = navHostFragment.navController
    
           binding.myButton.setOnClickListener {
               val currentDestination = navController.currentDestination?.id
               if (currentDestination == R.id.firstFragment) {
                   navController.navigate(R.id.goto_secondFragment)
               } else if (currentDestination == R.id.secondFragment) {
                   navController.navigate(R.id.goto_thirdFragment)
               }
           }
        }
    }
    

    Aquí hemos movido el id dentro del listener del botón, por lo que se obtiene en el momento de hacer clic en el botón. También hemos añadido una condición else if para asegurarnos de que sólo hay una navegación de fragmentos a la vez.

Comments are closed.