0

J'ai une configuration de tiroir de navigation qui, cliquez élément de menu remplacera le conteneur de fragment avec quel que soit nouveau fragment est en cours choisi dans le menu:Android ajouter fragment nouveau/différent du backstack

public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     switch (id) { 
      case R.id.nav_new: 
       if (subInfo.isEmpty()){ 
        addFragment(new NewFragment(), id); 
       } else { 
        addFragment(new SubjectInfoFragment(), id); 
       } 
       break; 
      case R.id.nav_start: 
       addFragment(new StartFragment(), id); 
       break; 
      case R.id.nav_save: 
       addFragment(new SaveFragment(), id); 
       break; 
      case R.id.nav_raw: 
       addFragment(new RawFragment(), id); 
       break; 
      case R.id.nav_accelerometer: 
       addFragment(new AccelerometerFragment(), id); 
       break; 
      case R.id.nav_accelerometerWorld: 
       addFragment(new AccelerometerWorldFragment(), id); 
       break; 
      case R.id.nav_gyroscope: 
       addFragment(new GyroscopeFragment(), id); 
       break; 
     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

Et la méthode pour fragments d'addition:

public void addFragment(Fragment fragment, int id) { 
     if (fragment != null) { 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

      if (fragmentManager.getFragments() == null) { 
       fragmentTransaction.replace(R.id.fragment_container, fragment, fragment.getClass().getSimpleName()) 
         .commit(); 
      } else { 
       fragmentTransaction.replace(R.id.fragment_container, fragment, fragment.getClass().getSimpleName()) 
         .addToBackStack(Integer.toString(id)) 
         .commit(); 
      } 
     } 
    } 

Dans un de mes fragments (NewFragment()) il y a une forme d'insertion de données, l'identifiant de cette option de menu est nav_new. Lorsque le bouton d'envoi est cliqué, la méthode addFragment est appelée à diriger l'utilisateur vers un autre fragment (StartFragment()) dans mon application:

mainActivity.addFragment(new StartFragment(), R.id.nav_new); 

Cependant, ajoutera au-dessus du formulaire d'insertion de données au backstack. Une fois que l'utilisateur a soumis le formulaire, je ne veux pas qu'il puisse revenir en arrière pour revenir au formulaire de soumission. Au lieu de cela je veux les diriger vers un autre fragment (SubjectInfoFragment()) qui contient un résumé de l'information qu'ils ont entrée

J'ai conçu ma méthode onNavigationItemSelected pour soutenir ceci. Lorsque l'élément de menu nav_new est cliqué, il vérifie si l'utilisateur a déjà entré des informations. Si ce n'est pas le cas, une transaction est effectuée, qui les amène à NewFragment pour entrer les informations de formulaire. Si elles ont, SubjectInfoFragment est montré au lieu d'afficher un résumé de leurs informations

Je l'ai déjà saisi de les diriger vers StartFragment sur la forme soumettre, mais l'ancien fragment de forme est ajouté à la backstack, qui est undesireable

Après la soumission d'un formulaire, comment puis-je gérer les transactions fragmentées de telle sorte que le bouton retour les amène à un fragment complètement nouveau (SubjectInfoFragment) au lieu de les ramener à la page de soumission de formulaire?

Ou dans le pire des cas, si je ne peux pas ajouter un fragment entièrement nouveau au backstack, comment puis-je au moins empêcher les utilisateurs de revenir à la page de soumission du formulaire?

Répondre

0

vous devez utiliser la ligne suivante pour ajouter un fragment à backstack:

getFragmentManager.addToBackStack(tag or null); 
+0

Non compris un message dans l'appel à 'addToBackStack' n'empêche pas le fragment d'être ajouté à la pile de retour si ... – Simon

+0

Qu'est-ce que vous voulez faire? vous voulez ajouter un fragment à backstack ou non? –

+0

Non, je pensais avoir précisé assez clairement ce que je voulais dans la question. Je veux ajouter un autre fragment au backstack au lieu de celui sur lequel je suis actuellement. De cette façon, les utilisateurs ne peuvent pas appuyer sur le bouton Retour pour revenir au fragment de soumission de formulaire, et verront plutôt le fragment de résumé – Simon