9

he creado una aplicación de muestra para probar este problema superposición superposición.tecla de retroceso para hacer estallar los espectáculos Fragmento fragmentos

Tengo un tipo de fragmento, Fragment1, y creo una nueva instancia de Fragment1 y la agrego a FrameLayout en mi actividad en tiempo de ejecución. Agrego el fragmento con la ayuda de unos pocos botones.

Nota: He dado a cada instancia nueva de Fragment1 un número diferente (n. ° 1, n. ° 2, n. ° 3, etc.) para mostrar en la interfaz de usuario y ayudarme a determinar qué fragmento estoy viendo.

Así que .. esto es lo que hago:

  1. Haga clic en el botón 3, crear una nueva instancia de Fragment1 y añadirlo a Frame1.
  2. Haga clic en el botón 4, crear nueva instancia de Fragment1 y añadirlo a Frame1 y añadirlo a la backstack fragmento.
  3. Repita 1 y 2.
  4. Repita 1 y 2.

Ahora, he fragmentos en este orden: 1 (# 1), 2 (# 2), 1 (# 3), 2 (# 4), 1 (# 5), 2 (# 6).

que pulse la tecla retroceder en la visualización fragmento # 6.

  1. Tecla de retroceso, visualización de IU (# 5).
  2. prensa, pantallas de interfaz de usuario Volver clave (# 3 y # 5),
  3. pulsar la tecla Atrás, muestra la interfaz de usuario (# 1, # 3 y # 5)

Parece fragmentos están siendo representada EN TOP el uno del otro.

¿POR QUÉ? ¿Hay un problema superpuesto? ¿Cómo puedo eliminar este problema superpuesto? Pensé que esto sería un problema en la biblioteca de compatibilidad ... pero también está en 3.0.

Código

para añadir fragmentos:

public int doFragmentChange(int cont1, Fragment frag1, String tag1, int cont2, Fragment frag2, String tag2, 
      boolean addToStack, String stackTag) { 
     FragmentManager fm = getFragmentManager();// getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     if (frag1 != null) { 
      ft.replace(cont1, frag1, tag1); 
     } 
     if (frag2 != null) { 
      ft.replace(cont2, frag2, tag2); 
     } 
     // add fragment to stack 
     if (addToStack) 
      ft.addToBackStack(stackTag); 
     return ft.commit(); 
    } 

Respuesta

1

Si realiza dos llamadas add uno tras otro (dos commit llamadas), entonces sí los fragmentos aparecerán superpuestos, uno encima del otro de manera efectiva.

Entonces (para el nuevo ejemplo) si digamos que reemplazas frag1 con frag2 y luego frag3 con frag4 en el mismo marco sin transacción de backstack entonces esperaría que se superpongan frag2 y frag4.

Además, también existe un problema potencial en el encadenamiento de replace. Debe llamar por separado a commit. Ver Android — Replace Fragment Back Stack With New Stack?.

+1

como puedo ver, no hay dos llamadas de agregado por confirmación. al lado enfrenté el mismo comportamiento superpuesto. http://stackoverflow.com/questions/14269350/how-to-keep-only-first-initial-fragment-in-back-stak-fragment-overlapping – Arvis

1

Simplemente anule onBackPress() o onKeyUp y elimine el fragmento superior.

Cuestiones relacionadas