Omita algunos fragmentos en BackPressed
Soy bastante nuevo con los fragmentos de Android, así que tengan paciencia conmigo.
Tengo un montón de fragmentos que usan una sola actividad como host.
En mi opinión, mis fragmentos están agrupados por secciones, aunque todavía son modulares / reutilizables por código. Considere este escenario deseado:
Frag1 -> (Presione Siguiente) -> Frag2 -> (Presione Siguiente) -> Frag3 -> (Presione Atrás) -> Frag1
Después de pasar por una serie de fragmentos, me gustaría omitir algunos fragmentos anteriores (en este escenario, omitir Frag 2) al presionar el botón Atrás.
Sin embargo, en mi código actual, mi problema es que, aunque vuelve a Frag1, Frag3 no desaparece de la pantalla. Lo que sucede es que tanto Frag1 como Frag3 se hacen visibles uno encima del otro.
Aquí están mis fragmentos de código relevantes:
Fragmento de código para crear Frag1
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
// init the fragment (with a default fragment, not null)
Fragment fragment = PlaceholderFragment.newInstance(position + 1);
// Position number from navigation sidebar starts from 0.
// Since position starts from 0, add 1 to match section number
// as implemented in {@link #onSectionAttached()}
switch(position) {
case 0:
fragment = PlaceholderFragment.newInstance(position + 1);
break;
case 1: // Frag1 case
fragment = new AddPointsFragment().newInstance(position + 1, "");
break;
default:
break;
}
// update the main content by replacing fragments
FragmentManager fragmentManager = getFragmentManager();
// clear all fragments from previous section from the back stack
fragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
// replace all currently added fragments in container and replace with the new fragment
fragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.commit();
}
Fragmento de código para crear Frag2
public void onEnterButtonFragmentInteraction(int sectionNumber, String cardNo) {
// TODO: Add point for given card number
int points = 5; //sample points
AddPointsSuccessFragment addPointsSuccessFragment =
new AddPointsSuccessFragment().newInstance(sectionNumber, cardNo, points);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, addPointsSuccessFragment)
.addToBackStack(null)
.commit();
}
Fragmento de código para crear Frag3
public void onOkButtonFragmentInteraction(int sectionNumber, String cardNo, int points) {
RedeemRewardFragment redeemRewardFragment =
new RedeemRewardFragment().newInstance(sectionNumber, cardNo, points);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.container, redeemRewardFragment);
fragmentTransaction.commit();
}
Mi solución actual para esto es agregar.addToBackStack(null)
al crear Frag3 y ejecutar este código
public void onBackButtonFragmentInteraction() {
this.onBackPressed(); // simulate pressing of activity back button
FragmentManager fragmentmanager = getFragmentManager();
fragmentmanager.popBackStack(); // pop Frag2 from back stack
}
justo después de llamar al método onBackPressed (). Desafortunadamente, esta solución es fea porque hay una apariencia de Frag2 en una fracción de segundo antes de ir a Frag1.