6

Mi sencilla diseño sólo tiene un marcador de posición fragmento:Por qué fragmento de cero en backstack

<FrameLayout 
    android:id="@+id/fragment_placeholder" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 

que en primer lugar añadir un primera fragmento a este marcador de posición:

fragmentTransaction.add(R.id.fragment_placeholder, firstFragment, "first"); //I did not put to backstack 

Tengo un segundo fragmento, que reemplaza el fragmento anterior y lo puso en la pila posterior:

FragmentManager fragMgr = getSupportFragmentManager(); 
FragmentTransaction fragTrans = fragMgr.beginTransaction(); 

//initialize an fragment instance 
Fragment secondFragment = initSecondFragment(); 

//replace with the fragment 
fragTrans.replace(R.id.fragment_placeholder, secondFragment, "second"); 

//Add transaction to back stack 
fragTrans.addToBackStack(null); 

//commit the transaction 
fragTrans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
fragTrans.commit(); 

//The following log returns me 0 when counting the number of fragments in back stack, why? 
Log.v("nr of fragment in back stack", fragMgr.getBackStackEntryCount()+""); 

Pero termino con fragmento de pila de vuelta, ¿por qué ???

+1

cometiste transacción? – Selvin

+0

@Selvin, SÍ, he confirmado la transacción, veré mi código actualizado en mi publicación. –

+0

También estoy viendo esto. ¿Has logrado resolverlo? – span

Respuesta

0

No estoy seguro como respuesta ... ¿Puede ser necesario esperar que se haya agregado el fragmento? Trata de conseguir contar de esta

new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       Log.v("nr of fragment in back stack", fragMgr.getBackStackEntryCount()+""); 
      } 
     },50); 
+0

muchas gracias !! esto fue todo para mí –

+0

No deberías estar usando temporizadores para escuchar este tipo de cambios ... ¿Qué pasa si la transacción tomó más de 50ms? –

+0

@ tf.alves sé que es una solución sucia, pero funciona para mí. ¿Puede ser que tengas una mejor sugerencia? – dooplaye

3

Prueba executePendingTransactions() antes de que el registro para asegurar que el cometer de que suceda. De esta manera:

fragMgr.executePendingTransactions(); 
Log.v("nr of fragment in back stack", fragMgr.getBackStackEntryCount()+""); 

creo que sirve ...

Cuestiones relacionadas