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:

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?

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ón indicator/affordance con el DrawerLayout vinculado.

Esto se debe llamar desde el método onPostCreate de su Activity para sincronizarse después de que el DrawerLayout de la instancia de DrawerLayout haya sido restaurado 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.)

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.

  • Gaveta de navegación (Google+ vs. YouTube)
  • Cómo obtener elementos en el cajón de navegación para cambiar la vista
  • Uso del cajón de navegación en Android más antiguo
  • ¿Cómo eliminar fragmento el fragmento reemplazado en la transición de fragmentos?
  • Selección de elementos de fila de reciclaje
  • Cómo cambiar la fuente de navegación Encabezado de cajón y ScrollingActivity?
  • Ocultar ActionBar MenuItems cuando se desliza el cajón de navegación para cualquier cantidad
  • El cajón de navegación en android no está en pantalla completa
  • Indicador de cajón en lollipop play store
  • Actualización de un fragmento en respuesta a la interacción de Android Navigation Drawer
  • Hacer clic en icono de hamburguesa en la barra de herramientas no abre Cajón de navegación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.