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?
Non compris un message dans l'appel à 'addToBackStack' n'empêche pas le fragment d'être ajouté à la pile de retour si ... – Simon
Qu'est-ce que vous voulez faire? vous voulez ajouter un fragment à backstack ou non? –
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