android - studio - Eliminar un fragmento de la pila posterior
navegar entre fragments android studio (3)
¿Qué sucede si el fragmento que desea eliminar no está en la parte superior de la pila?
Entonces puedes usar estas funciones
Tengo 3 fragmentos en una actividad cuando la tableta está en retrato. Sin embargo, solo tengo 2 de estos fragmentos cuando estoy en el paisaje. El problema que tengo es que al pasar de vertical a horizontal, la actividad crea el 3er fragmento. Recibo un error ya que este fragmento no puede ser creado.
He calculado que este fragmento se está creando porque está en la pila de respaldo.
Intenté eliminar el fragmento en el método onDestroy utilizando
FragmentTransaction f = fragmentManager.beginTransaction();
f.remove(mf);
f.commit();
Sin embargo, me sale un error que dice que no puedo usar esta función después de onSaveInstanceState
¿Cuál sería la forma correcta de sacar este fragmento de la pila de respaldo?
Actualizar
Probablemente debería añadir que el fragmento con el que estoy teniendo problemas es un mapFragment de esta biblioteca
https://github.com/petedoyle/android-support-v4-googlemaps
La forma en que la uso es así
mf = MapFragment.newInstance(1, true);
ft = fragmentManager.beginTransaction();
ft.replace(R.id.mapContainer, mf);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack("map");
ft.commit();
Creé un código para saltar al índice de pila de respaldo deseado, funcionó bien para mi propósito.
es decir. Tengo Fragment1, Fragment2 y Fragment3, quiero saltar de Fragment3 a Fragment1
Creé un método llamado onBackPressed en Fragment3 que salta a Fragment1
Fragmento3:
public void onBackPressed() {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.popBackStack(fragmentManager.getBackStackEntryAt(fragmentManager.getBackStackEntryCount()-2).getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
En la actividad, necesito saber si mi fragmento actual es Fragment3, así que llamo a onBackPressed de mi fragmento en lugar de llamar a super
FragmentActivity:
@Override
public void onBackPressed() {
Fragment f = getSupportFragmentManager().findFragmentById(R.id.my_fragment_container);
if (f instanceof Fragment3)
{
((Fragment3)f).onBackPressed();
} else {
super.onBackPressed();
}
}
Usted agrega al estado reverso desde FragmentTransaction
y lo elimina del backstack usando los métodos FragmentManager
pop:
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove(myFrag);
trans.commit();
manager.popBackStack();