Cajón de navegación – ¿qué hace syncState () y por qué debe llamarse dentro onPostCreate ()?
Estoy aprendiendo a crear el cajón de navegación en Android. Al leer esto , no puedo entender el siguiente código:
@Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Sync the toggle state after onRestoreInstanceState has occurred. mDrawerToggle.syncState(); }
La documentación dice:
- Android - Cambiar el Botón Atrás del Botón de Navegación de ActionBar
- El cajón de navegación se cerrará incluso si se sobreescribe OnBackPressed ()
- Android: 2 o más ExpandableListView dentro del Gaveta de navegación
- Animación ActionBarDrawerToggle
- Icono de hamburguesa no se muestra en el fragmento de cajón de navegación
Sincronice el estado del indicador del cajón / affordance con el DrawerLayout vinculado.
Esto se debe llamar desde el método onPostCreate de su actividad para sincronizarse después de restaurar el estado de la instancia de DrawerLayout y en cualquier otro momento cuando el estado puede haber divergido de tal manera que el ActionBarDrawerToggle no fue notificado. (Por ejemplo, si deja de enviar eventos de cajón adecuados durante un período de tiempo.)
Más adelante he leído sobre onPostCreate()
de la respuesta de sstn aquí : OnPostCreate in Fragment
OnPostCreate () está destinado principalmente al uso del framework (aunque se puede anularlo). Los documentos dicen que se llama después de onStart () y onRestoreInstanceState ().
Esto podría conducir a la asunción de que podría ser llamado antes onResume () y por lo tanto probablemente antes de que el bucle de mensajes está distribuyendo eventos (incluido el método onPostExecute () de AsyncTask), lo que significa que su onPostExecute () sólo se disparará después onPause ().
Como onPostCreate () no está debidamente documentado y realmente no está destinado a uso de aplicaciones – podría decir que no es una buena idea confiar en cualquier comportamiento observado.
De estos dos no pude entender nada. ¿Qué hace exactamente syncState()
y por qué debe estar dentro de onPostcreate()
? ¿Puede alguien explicarlo mejor?
- Alternar el cajón de navegación 'abrir' en el botón / clic de imagen
- Cajón de navegación Cambia el fondo mientras se desplaza
- Cómo poner los elementos de la lista en la parte inferior de la vista de lista en el Cajón de navegación como Foursquare
- ActionBarDrawerToggle Ningún constructor adecuado Drawable
- Borde de desplazamiento de Android Navigation Drawer
- Cómo crear un cajón de navegación personalizado en android
- Desenfocar el fondo del cajón de navegación
- El botón de acción flotante aparece sobre el cajón de navegación
Bueno, pienso que esta pregunta es buena. Y recogeré esta pregunta y sus respuestas. Así que, hagamos algunos resúmenes aquí:
En primer lugar , en cuanto a ActionBarDrawerToggle.syncState()
, como dice el documento,
Sincronice el estado del
indicator/affordance
del cajónindicator/affordance
con elDrawerLayout
vinculado.Esto se debe llamar desde el método
onPostCreate
de suActivity
para sincronizarse después de que elDrawerLayout
de la instancia deDrawerLayout
haya sido restaurado y en cualquier otro momento cuando el estado puede haber divergido de tal manera que elActionBarDrawerToggle
no fue notificado. (Por ejemplo, si deja de enviar eventos de cajón adecuados durante un período de tiempo.)
En segundo lugar , en cuanto a Activity.onPostCreate(Bundle)
, se denomina cuando se ha completado el inicio de actividad (después de onStart()
y onRestoreInstanceState(Bundle)
). Las aplicaciones generalmente no implementarán este método; Está previsto que las clases del sistema hagan la inicialización final después de que se ejecute el código de la aplicación.
Pero, se deriva que las clases deben llamar a través de la implementación de la clase super de este método. Si no lo hacen, se lanzará una excepción.
Entonces, ¿qué hace exactamente syncState()
?
Bueno, ActionBarDrawerToggle.syncState()
sincronizará el estado del icono cambiado, lo que deponds en las acciones de DrawerLayout
. Si alguna vez intentaste eliminar el syncState()
, te darás cuenta de que el icono de flecha no girará más.
¿ Y por qué se debe llamar a onPostcreate()
dentro de onPostcreate()
?
Bueno, onPostcreate()
se llama cuando el inicio de la actividad se ha completado (después de onStart()
y onRestoreInstanceState(Bundle)
se han llamado), mientras que en el momento, la Activity
necesita animaciones para estar listo para trabajar. Así que, si no es el mejor momento para las animaciones, ¿cuándo es?
Que hace syncState ()
Se sincronizará el icono del cajón que gira cuando el cajón se desliza hacia la izquierda o hacia la derecha y si intenta eliminar el syncState()
la sincronización fallará, lo que resultará en una rotación de buggy o incluso no funcionará.
¿Por qué debería llamarse dentro onPostCreate ()?
Se llama en el onPostCreate
para sincronizar la animación de nuevo cuando se restaura la Activity
. Lo bueno de onPostCreate
es que se llama justo después onRestoreInstanceState
Editar:
Como se indica en @Vikram se puede ver la documentación en línea del método syncState
Necesita llamar a syncState()
de la actividad onPostCreate de su actividad para establecer el estado del indicador (icono + cajón en sí) basado en si el diseño del cajón está en estado abierto o cerrado una vez que la actividad se ha restaurado con onRestoreInstanceState
.
Simplemente diga: SyncState () es sincronizar el estado de conmutación después de que onRestoreInstanceState haya ocurrido. Y llamarlo en onPostCreate(...)
es debido a que onPostCreate(...)
se llama justo después de onRestoreInstanceState(...)
se llama.
- Qué hacer cuando – java.io.FileNotFoundException: ¿No hay proveedor de contenido?
- Cómo crear una biblioteca en Github y usarla a través de las dependencias de gradle en Android Studio