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).

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.

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.

  • Problemas con FragmentPagerAdapter
  • YouTubePlayerSupportFragment en el elemento ListView es nulo
  • La recreación de fragmentos de ViewPager se reanuda pero no se ve
  • Obj Fragmento incorrecto 2º tipo de argumento encontrado 'Android.support.V4.app.Fragment.' Requerido 'Android.app.Fragment'
  • Barra de acción Incrementar Ver Badger en el botón haga clic utilizando fragmentos
  • ViewPager en DialogFragment - IllegalStateException: Fragmento no tiene una vista
  • Cómo Reverse Fragment animaciones en BackStack?
  • Android - IllegalStateException: mapa tiene tamaño cero
  • Manejo de cambios de configuración de UI automática en Actividad y Fragmento falla a veces
  • Actividad existente en fragmentos
  • ¿Vincular el servicio a la actividad o fragmento?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.