tutorial studio onattach navegar fragments example entre ejemplo activity android android-fragments

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

popBackStack(int arg0, int arg1);

popBackStack(String arg0, int arg1);

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();