Fragmento de transacciones, barra de acción y backstack
En mi actividad principal, tengo una barra de acción con NAVIGATION_MODE_TABS
. El contenido de cada ficha es un listfragment.
Me gustaría hacer que cuando se haga clic en un listitem, se muestre un nuevo fragmento y el modo de barra de acciones se cambie a NAVIGATION_MODE_STANDARD
(para que las pestañas estén ahora ocultas).
- Android muestra teclado suave cuando el fragmento onResume
- Fragmento getView () devuelve null en una devolución de llamada OnClickListener
- Cómo mostrar 3 fragmentos dentro de PageViewer
- Fragmento desaparece de la espalda
- Cómo implementar el menú de pestaña de Android sin tabhost obsoleto
He conseguido que esto funcione con el código siguiente:
En el método listitemclick:
ActionBar actionBar = getActivity().getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); Fragment albumListFragment = new AlbumListFragment(); albumListFragment.setArguments(bundle); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(android.R.id.content, albumListFragment); ft.addToBackStack(null); // Commit the transaction ft.commit(); Log.i("FragmentList", "Item clicked: " + id);
El problema es cuando presiono el botón Atrás, las pestañas todavía se han ido, y el fragmento anterior no vuelve a la vista.
¿Estoy haciendo algo malo .. ¿Es algo que ver con el fragmento backstack? ¿Debo hacerlo de otra manera, o incluso anular la contrapresión?
–Editar–
Para mayor claridad, llamo a addToBackStack cuando llamo a fragmenttransaction.replace, pero cuando presiono el botón de retroceso, el fragmento anterior no se restaura.
- Fragmento de diálogo con wrap_content que viene como una pantalla completa. ¿Cómo hacerlo como una altura de diseño y no una pantalla completa?
- Xamarin Android Data-Binding con MVVM Light
- ¿Cuándo se llamaría a OnDestroyView de Fragment, pero no sería destruido?
- Enviar paquete con transacción de fragmentos
- Implementación de desplazamiento entre pestañas mediante tab-host en Android
- Fragmento newInstance ¿por qué usar argumentos?
- Androide; Fragmentos se superponen al cambiar las pestañas
- Mejor práctica para actualizar los argumentos de un fragmento?
Tal vez esto es un poco tarde, traté de reconstruir su problema durante horas, pero no tuvo éxito. Intenté cambiar de un listview en un fragmento alojado por una pestaña de ActionBar a otra vista por la manera descrita en su pregunta (es decir ft.replace (android.R.id.content, albumListFragment);) pero sin efecto. Después de algunos google y stackoverflow, uso de esta manera para cambiar con éxito el fragmento dentro de la pestaña, pero sin ningún problema como usted.
Como la "barra de acción no está mostrando correctamente" el problema , es probable que causado por el backstack revertir y cambiar la interfaz de usuario como se describe en la guía de desarrolladores android . Puede intentar reemplazar la devolución de llamada onBackStackChanged () y reconstruir la interfaz de usuario.
A medida que el problema de "backstack no trae el fragmento anterior" , es posible que desee publicar un poco más de código para ayudar a otros a reconstruir el problema para encontrar la respuesta.
Deseo útil.
He experimentado exactamente el mismo problema y me di cuenta de que el problema sólo se produce cuando se establece el ActionBar volver a NAVIGATION_MODE_STANDARD.
La única solución para mí era colocar el nuevo fragmento sin pestañas en una actividad de ayuda que tiene NAVIGATION_MODE_STANDARD. A continuación, puede utilizar fácilmente la funcionalidad de botón de retroceso proporcionada por Android para volver a la actividad con NAVIGATION_MODE_TABS y conservar su estado.
FragmentTransaction.replace () realmente elimina el fragmento anterior en el diseño y agrega una nueva instancia del fragmento.
Trate de utilizar FragmentTransaction # show () y FragmentTransaction # hide () métodos en lugar de reemplazar.
El backstack termina la actividad actual y pasa a la actividad anterior, no al fragmento anterior. (Vea la guía backstack: http://developer.android.com/guide/components/tasks-and-back-stack.html ).
Usted podría forzar, como usted sugirió, el comportamiento de sobrepasar onBackPressed, sin embargo, no sé que cambiaría el comportamiento natural de Android de tal manera. Si observa otras aplicaciones, en particular las aplicaciones principales, que hacen cosas similares, el botón Atrás no va a un fragmento anterior, sino a una actividad anterior.
También tienes control total sobre el comportamiento del botón "arriba" (que es el icono de tu aplicación en la barra de acción con una flecha hacia la izquierda). Tienes que programarlo para que sea usado como un botón como se describe en la guía ActionBar (déjame saber si necesitas saber cómo hacerlo) y con eso podrías configurar un fragmento anterior en una pila que Mantener en alguna parte.
- ¿Puede guardar / ver un archivo de vídeo y los datos del sensor simultáneamente?
- Reproducción de vídeos del sistema de archivos Chrome no funciona en Android