from - popbackstackimmediate android
¿Cuál es el significado de addToBackStack con parámetro nulo? (2)
Tengo un código de cliente. Solo hay una actividad para todos los fragmentos, es decir, la actividad individual está administrando todos los fragmentos.
Esta actividad contiene el siguiente código para cualquier fragmento en el método al final de ese fragmento:
Por ejemplo, fragmento MoreFragment:
MoreFragment firstFragment = new MoreFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.article_fragment, firstFragment)
.addToBackStack(null).commit();
Asi que,
1) ¿Cuál es el significado de addToBackStack(null)
seguido de un commit()
?
2) ¿Por qué necesita pasar un parámetro nulo a addToBackStack
?
3) ¿Cómo conseguir ese fragmento después de ser agregado así?
Parece que este código es inútil ya que ejecuté el código sin la última línea .addToBackStack(null).commit()
y se ejecutó sin ningún problema.
¿Cuál es el significado de addToBackStack (null) seguido de un commit ()?
Citando documentos
Al llamar a addToBackStack (), la transacción de reemplazo se guarda en la pila posterior para que el usuario pueda revertir la transacción y recuperar el fragmento anterior presionando el botón Atrás.
Si agrega varios cambios a la transacción (como otro add () o remove ()) y llama a addToBackStack (), todos los cambios aplicados antes de llamar a commit () se agregan a la pila posterior como una sola transacción y el botón Atrás los revertirá a todos juntos.
El orden en el que agrega cambios a FragmentTransaction no importa, excepto:
Debe invocar commit()
last Si agrega varios fragmentos al mismo contenedor, el orden en que los agrega determina el orden en que aparecen en la jerarquía de vistas.
Entonces te has comprometido al final.
¿Por qué necesita pasar un parámetro nulo a addToBackStack?
No necesita ser nulo, puede ser una cadena. Si no quieres solo pasar el nulo
Resumen público FragmentTransaction addToBackStack (String name)
Agregado en el nivel de API 11 Agregue esta transacción a la pila de respaldo. Esto significa que la transacción será recordada después de que se haya comprometido, y revertirá su operación cuando más tarde salga de la pila.
Nombre de parámetros Un nombre opcional para este estado de pila posterior, o nulo.
Sobre:
Parece que este código es inútil ya que ejecuté el código sin la última línea .addToBackStack (null) .commit () y se ejecutó sin ningún problema
Si desea navegar a un fragmento anterior, agréguelo al backstack. Por lo tanto, depende de si desea agregar el fragmento a la columna posterior.
¿Cómo obtener ese fragmento después de ser agregado así?
Ya tiene la instancia de fragmento firstFragment
. Así que no sé a qué te refieres con obtener el fragmento más tarde
Más información @
http://developer.android.com/guide/components/fragments.html
Tus respuestas están en desuso. Si no desea agregar fragmentos a la pila posterior, debe usar el siguiente fragmento de código:
public static void replaceFragment (@NonNull FragmentManager fragmentManager,
@NonNull Fragment fragment,int frameId){
checkNotNull(fragmentManager);
checkNotNull(fragment);
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(frameId, fragment);
transaction.disallowAddToBackStack(); // <-- This makes magic!
transaction.commit();
}
Debajo tienes lindo ejemplo de como usarlo:
GameFragment fragment = GameFragment.newInstance(mGameObject, currentQuestion);
ActivityUtils.replaceFragment(getFragmentManager(), fragment, R.id.main);