ActionBarActivity botón de retroceso no estallar de backstack
Estoy usando esta plantilla https://github.com/kanytu/android-material-drawer-template sólo para probar el material design
por lo que he implementado algunos fragmentos algunos tienen webviews algunos no.
Mi problema es cuando el cambio entre los fragmentos puedo ver que se han añadido con éxito a la backstack
- Botón de acción flotante en una actividad - ¿cómo anclar a una vista de reciclaje en un fragmento?
- Mejor manera de iniciar fragmentos
- TabActivity -> Fragmentos .. ¿es realmente esto complicado?
- Diseño de cajón y diseño de múltiples paneles
- ¿Debe un novato olvidarse de los fragmentos?
getFragmentManager().beginTransaction().replace(R.id.container, new FAQ()).addToBackStack("FAQ").commit();
Pero cuando presiono el botón de nuevo sólo cierra la aplicación.
Cuando lo cambio para usar la Activity
vez de ActionBarActivity
la navegación trabaja muy bien pero pierdo alguna otra funcionalidad.
Hay una anulación en el botón de retroceso
@Override public void onBackPressed() { if (mNavigationDrawerFragment.isDrawerOpen()) mNavigationDrawerFragment.closeDrawer(); else super.onBackPressed(); }
Pero incluso si eso se quita todavía sucede. Creo que el problema se encuentra en algún lugar en el super.onBackPressed
¿Hay alguna razón ActionBarActivity
rompería el botón de la parte posterior?
- Cómo actualizar mis actividades a fragmentos y evitar ClassCastException?
- Cómo reemplazar un DialogFragment por otro DialogFragment?
- ¿Cómo manejar savedInstanceState cuando se usa ViewPager?
- No se puede cambiar dinámicamente un diseño de DialogFragment personalizado
- Fragmento de Viewpager anidado no inicializado
- El OnClickListener de Fragment llamado después de OnDestroyView
- Fragment's onDestroyView llamado pero la vista no está siendo destruida
- Fija la posición del botón en la actividad de los padres cuando el teclado está abierto
Hace poco leí un post sobre esto, lo siento, no puedo encontrarlo más … Pero básicamente, explicó que la función principal del botón Volver es terminar la Activity
actual.
De hecho, de acuerdo con la documentación oficial de onBackPressed()
:
Se llama cuando la actividad ha detectado la pulsación del usuario de la tecla de retroceso. La implementación predeterminada simplemente termina la actividad actual, pero puede anularla para hacer lo que quiera.
Y parece que a pesar de que el botón de retroceso utilizado para pop el backstack antes de 5.0, Google habría cambiado este comportamiento con la nueva ActionBarActivity
.
Por mi parte, he usado un workarround que funciona para mí, pero que podría no funcionar para todos, dependiendo de su aplicación de navegación.
Pero en caso de que podría ser útil para alguien, aquí está:
@Override public void onBackPressed() { if (mDrawerLayout.isDrawerOpen()) { mDrawerLayout.closeDrawer(); } else if (getFragmentManager().getBackStackEntryCount() > 0) { getFragmentManager().popBackStack(); } else { super.onBackPressed(); } }
De esta manera, ActionBarActivity.onBackPressed()
sólo se llama cuando la backstack está vacía, en cuyo caso destruye ActionBarActivity
.
Usted debe comprobar "getFragmentManager" y "getSupportFragmentManager" se corresponde con su actividad y actionbaractivity o no.
Porque, en Actividad:
public void onBackPressed() { if (!mFragments.popBackStackImmediate()) { finish(); } }
En FragmentActivity:
public void onBackPressed() { if (!mFragments.popBackStackImmediate()) { finish(); } }
Podemos ver el mismo código que ya maneja backstatck fragmentos pop. En mi situación, he usado actionbaractivity (extends FragmentAcvitiy), pero también usé "getFragmentManager", así que tengo el mismo error que tú. Después de haber reemplazado "getFragmentManager" por "getSupportFragmentManager", ¡eso está bien! También puede reemplazar "actionbaractiviy" por "Activity" para solucionar este problema.
Debe asegurarse de que "getFragmentManager" coincida con "Actividad", "getSupportFragmentManager" coincida con "FragmentActivity (ActionbarActivity)".
Si desea agregar barra de acción En el nivel de API 11 o superior, puede ver a continuación:
https://developer.android.com/guide/topics/ui/actionbar.html#Adding
En el nivel 11 de la API o superior La barra de acciones se incluye en todas las actividades que utilizan el tema Theme.Holo (o uno de sus descendientes), que es el tema predeterminado cuando el atributo targetSdkVersion o minSdkVersion está establecido en "11" o superior. Si no desea que la barra de acción de una actividad, establezca el tema de actividad en Theme.Holo.NoActionBar.
- Descripción de las transiciones de elementos compartidos exit / reenter
- ¿Cómo se actualiza a Android SDK 25.1.3?