J'ai besoin d'une deuxième activité avec un graphique de navigation et un bouton de retour dans la barre d'outils vers la première activité qui contient également un graphique de navigation
Dans ma deuxième activité, j'ai onSupportNavigateUp et setupActionBarWithNavController lors de la saisie des fragments si la flèche de retour apparaît mais dans l'activité n °.
Essayez d'ajouter setHomeButtonEnabled et setDisplayHomeAsUpEnabled à la fois dans l'activité et dans le fragment et si le bouton réapparaît, mais lorsque j'entre un fragment devant et que je retourne au fragment startDestination, le bouton disparaît
J'ai juste besoin de garder le bouton de retour dans l'activité et de résoudre mon problème
4 Réponses :
Ajoutez la fonction setHomeButtonEnabled . à votre action de retour. Si vous revenez avec le bouton, ajoutez-le à onClick ou avec backPress, remplacez backPress.
Avec cette solution: vous allez activer votre bouton lorsque vous essayez de renvoyer votre startDestination.
Vous ne pouvez pas, l'activité a ses propres barres d'outils et dans votre cas, ils ont deux NavControllers différents. Ainsi, votre deuxième activité gère le bouton NavUp pour son fragment et lorsque le fragment de destination démarre, NavUpButton (Backbutton) disparaît car il n'a laissé aucune destination. Et si vous affichez par programme le bouton NavUp sur la destination de départ de cette (2ème activité) et gérez onClick et démarrez la première activité qui va toujours à la destination de départ du fragment de la première activité, car il possède son propre contrôleur de navigation.
Le problème est que l'interface utilisateur de navigation ne fonctionne pas comme ça. La meilleure approche consiste à n'utiliser qu'une seule activité avec plusieurs fragments. Et utilisez toute autre approche pour résoudre votre problème dans le même contrôleur de navigation.
Vous pouvez le faire en spécifiant un setFallbackOnNavigateUpListener:
override fun onNavigateUp(): Boolean { finish() return true }
Et puis faire ce que vous voulez dans l'activité:
private fun setupToolbar() { val navController = findNavController(R.id.nav_host_fragment) val appBarConfiguration = AppBarConfiguration.Builder() .setFallbackOnNavigateUpListener { onNavigateUp() } .build() dataBinding.toolbar.apply { setupWithNavController(navController, appBarConfiguration) } }
J'ai créé une interface pour afficher / masquer le bouton de l'activité de l'hôte de navigation. Voici comment l'activité implémente les méthodes d'interface pour afficher / masquer le bouton haut:
private fun setupBackPress() { requireActivity() .onBackPressedDispatcher .addCallback(this, object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { } }) }
Voici la méthode de l'activité lorsque vous appuyez sur le bouton haut:
override fun onSupportNavigateUp(): Boolean { val navController = this.findNavController(R.id.nav_host) if(!navController.navigateUp()){ // When in start destination onBackPressed() } return navController.navigateUp() }
Dans un fragment peut écouter chaque fois que le bouton de retour (PAS le bouton vers le haut) est enfoncé:
override fun showUpButton() { val navController = this.findNavController(R.id.nav_host) val listener = AppBarConfiguration.OnNavigateUpListener { navController.navigateUp() } val abc = AppBarConfiguration.Builder().setFallbackOnNavigateUpListener(listener).build() NavigationUI.setupActionBarWithNavController(this, navController, abc) } override fun hideUpButton() { val navController = this.findNavController(R.id.nav_host) NavigationUI.setupActionBarWithNavController(this, navController) }
Pourquoi avez-vous une deuxième activité?