Digamos que tengo una actividad que tiene fragmentos agregados mediante programación:
private void animateToFragment(Fragment newFragment, String tag) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, newFragment, tag);
ft.addToBackStack(null);
ft.commit();
}
¿Cuál es la mejor manera de volver al fragmento anterior que era visible?
Encontré la funcionalidad del botón de retroceso del disparador al hacer clic en el botón en Android, pero creo que simular un evento de tecla de retroceso no es la forma correcta de hacerlo (y tampoco puedo hacer que funcione):
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
Llamar finish()
solo cierra la actividad que no me interesa.
¿Hay una mejor manera de hacerlo?
android
android-fragments
back-stack
Aske B.
fuente
fuente
getFragmentManager().popBackStackImmediate();
Hizo el truco. Gracias.Para elaborar sobre las otras respuestas proporcionadas, esta es mi solución (colocada en una Actividad):
fuente
fm.getBackStackEntryCount() > 1
para volver a llamar a la actividad cuando solo hay el primer fragmento en la pila.Cuando estamos actualizando / agregando los fragmentos,
Debe incluir el
.addToBackStack()
.Después de eso, si le damos, el resultado
getFragments.popBackStackImmediate()
será verdadero si agregamos / actualizamos los fragmentos y volvemos a la pantalla actual.fuente
Agregue esas líneas a su Método onBackPressed (). El método popBackStackImmediate () lo llevará de regreso al fragmento anterior si tiene algún fragmento en la pila posterior `
``
fuente
Esta solución funciona perfectamente para la navegación de fragmentos basada en la barra inferior cuando desea cerrar la aplicación cuando se vuelve a presionar en el fragmento primario.
Por otro lado, cuando está abriendo el fragmento secundario (fragmento en fragmento) que se define como "DetailPizza" en mi código, devolverá el estado anterior del fragmento primario. Salud !
Las actividades internas en la parte posterior presionadas ponen esto:
Y lanza el otro fragmento así:
fuente
Estas respuestas no funcionan si no tengo addToBackStack () agregado a mi transacción de fragmento, pero puede usar:
de cualquier fragmento para retroceder un paso;
fuente
Regrese programáticamente al fragmento anterior usando el siguiente código.
fuente
Para hacer que ese fragmento vuelva a aparecer, solo agregue ese fragmento al backstack que desea volver a presionar, por ejemplo:
En el caso anterior, estoy abriendo
LoginFragment
cuandoButton button
se presiona, en este momento el usuario está enSignupFragment
. Entonces, siaddToBackStack(TAG)
se llama, dóndeTAG = "SignupFragment"
, luego, cuando se presiona el botón AtrásLoginFragment
, volvemos aSignUpFragment
.¡Feliz codificación!
fuente
Al agregar
fragment_tran.addToBackStack(null)
el último fragmento, puedo volver al último fragmento.agregando nuevo fragmento :
fuente
Vine aquí buscando o la misma idea, y mientras tanto se me ocurrió la propia, que creo que no es tan mala y funciona si con ViewPager.
Entonces, lo que hice fue anular el método onBackPressed en la actividad principal que contiene viewPager y configurarlo para que siempre retroceda menos 1 posición hasta que alcance el primer fragmento, luego cierra la actividad.
Esto podría tener una desventaja, como si solo retrocediera una vez a la izquierda cada vez, por lo que podría no funcionar muy bien si hay pestañas y cambia de posición con fragmentos omitidos (pasar de 0 a 2 y luego presionar hacia atrás lo pondría 1, en lugar de 0)
Aunque para mi caso, con 2 fragmentos en viewPager sin pestañas, funciona bien.
fuente
Pruebe el siguiente código:
fuente