Fragmento de PopBackStack

Estoy recibiendo un extraño problema, mientras que el uso de fragmentos y hacer estallar de nuevo a cabo.

Tengo una Actividad de Fragmento:

Paso 1: Estoy adjuntando un fragmento en el onCreate de esa actividad en el inicio llamado Fragmento A como:

Esta es la actividad de Activación de Fragmentos

@Override protected void onCreate(Bundle savedBundleState) { super.onCreate(savedBundleState); setContentView(R.layout.activity_base_new); Fragement_Home home = new Fragement_Home(); FragmentManager manager = getSupportFragmentManager(); manager.beginTransaction().add(R.id.frameContent, home).addToBackStack("home").commit(); } 

Paso: 2 Después de que adjunto sustituido el fragmento con el siguiente código:

 Fragment_More moreFragment = new Fragment_More(); FragmentManager manager = getSupportFragmentManager(); manager.beginTransaction().replace(R.id.frameContent, moreFragment).addToBackStack("more").commit(); 

Paso 3: Después de que otra vez he añadido un fragmento más en Fragment_More de la misma manera:

 Fragment_AboutRockstand termsConditions = new Fragment_AboutRockstand(); getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.frameContent, termsConditions).addToBackStack("about_rockstand").commit(); 

Y aquí está la Actividad de mi Fragmento onBackPressedButton Lisetener:

 @Override public void onBackPressed() { FragmentManager fm = getSupportFragmentManager(); Fragment f = fm.findFragmentById(R.id.frameContent); if(fm.getBackStackEntryCount() > 1){ fm.popBackStack(); } else{ finish(); } } 

Aquí está el problema que estoy recibiendo:

Cuando presiono de nuevo desde el paso 3, me da fragmento anterior con éxito como se describe por onBackPressed, se popbackstack y me llevará al fragmento anterior. Pero desde Fragment_More, cuando vuelvo a presionar, me muestra el contenido en blanco del FRAGMENTO. Nunca muestra el Primer Fragmento que yo había añadido en el Paso 1 en la Creación de la Actividad.

Por favor comenta. Que estoy haciendo mal ?

Gracias

No debes añadir tu primer fragmento al backstack, ya que al presionar la tecla Return simplemente invertirás la acción que hiciste. Así que si reemplaza un fragmento y presiona hacia atrás, invertirá el reemplazo que hizo. Pero si presionas en un .add() ' .add() ' fragmenttransaction, simplemente lo quitará y mostrará una página en blanco. Así que creo que la eliminación del primer fragmento de la backstack debe hacer el truco. Pruébalo y házmelo saber!

 @Override protected void onCreate(Bundle savedBundleState) { super.onCreate(savedBundleState); setContentView(R.layout.activity_base_new); Fragement_Home home = new Fragement_Home(); FragmentManager manager = getSupportFragmentManager(); manager.beginTransaction().add(R.id.frameContent, home).commit(); } 

EJEMPLO:

Así que digamos que usted tiene dos fragmentos llamados A & B

Si usted .add() fragmento A a la página, y " addToBackStack() " (= guardar reverso de la acción) habrá guardado el REMOVE fragmento A como acción cuando haga clic en la parte posterior.

Si .replace() fragmento A por el fragmento B , y también " addToBackStack() ", habrá guardado la eliminación B y agregará A como acción cuando haga clic en la parte posterior.

Entonces, ¿entiendes por qué no es buena práctica agregar tu primera fragmenttransaction al backstack? Sólo resultará en la eliminación del fragmento A presionando hacia atrás, lo que resultará en una página en blanco. Espero que esto es suficiente información.

Además, una vez que haya eliminado el addToBackStack() a su primer fragmento, no necesita sobrescribir onBackPressed() porque funcionará como se supone que. Acaba de terminar la actividad cuando no queda nada en el backstack sin mostrar la primera página en blanco.

Su línea:

 if(fm.getBackStackEntryCount() > 1){ 

debiera ser:

 if (fm.getBackStackEntryCount() > 0) { 

Usted está poniendo 3 fragmentos en el backstack. Después de estallar las dos primeras entradas, el recuento de entradas en la pila posterior es igual a 1. Así que se impide recuperar el primer fragmento que agregó al backstack.

Usted está utilizando este manager.beginTransaction().add(R.id.frameContent, home).addToBackStack("home").commit();

Intenta usar esto en lugar de manager.beginTransaction().replace(R.id.frameContent, home).addToBackStack("home").commit();

Avísame si funciona para ti

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.