J'ai passé toute la journée à chercher une réponse et je n'ai trouvé aucune solution adaptée à cette question.Comment implémenter une navigation de retour correcte pour Android BottomNavigation
Je cherche un moyen de créer une utilisation de BottomNavigation similaire à celle de l'application Instagram ou PlayKiosk. Les fragments ne doivent être ajoutés à la pile arrière qu'une seule fois. Lorsque j'appuie sur le bouton de retour, je m'attends à ce que l'application revienne au dernier fragment visité et au bouton de la BottomNavigation correspondant à ce fragment.
Actuellement, j'utiliser le code suivant:
//BottomNavigationListener
private BottomNavigationView.OnNavigationItemSelectedListener buttonNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
FragmentManager fragmentManager = getSupportFragmentManager();
switch (item.getItemId()) {
case R.id.navigation_game:
currentFragment = GameFragment.newInstance();
fragmentManager.beginTransaction()
.addToBackStack(TAG_FRAGMENT_GAME)
.replace(R.id.content_frame, currentFragment, TAG_FRAGMENT_GAME)
.commit();
break;
case R.id.navigation_tournament:
currentFragment = TournamentFragment.newInstance();
fragmentManager.beginTransaction()
.addToBackStack(TAG_FRAGMENT_TOURNAMENT)
.replace(R.id.content_frame, currentFragment, TAG_FRAGMENT_TOURNAMENT)
.commit();
break;
case R.id.navigation_history:
break;
}
return true;
}
};
Mais cela conduit au problème que je pouvais appuyer sur le bouton de mon BottomNavigation deux ou trois fois et pour chacun de ces clics serait instancié un nouveau fragment. Les boutons BottomNavigation ne sont pas non plus définis en fonction des fragments.
Je trouve cette réponse, mais ça n'a pas Prevent The Same Fragment From Stacking More Than Once (addToBackStack)
Vous pouvez gérer la méthode onBackPressed? Gardez le dernier fragment quand il s'est ouvert et quand vous appuyez sur le bouton de retour, il suffit de remplacer le dernier fragment que vous avez visité. –