Подтвердить что ты не робот

Навигационный ящик - что делает syncState() и почему его следует вызывать внутри onPostCreate()?

Я изучаю создание навигационного ящика в Android. При чтении this, я не могу понять следующий код:

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

В документации написано:

Синхронизировать состояние индикатора/ связанный DrawerLayout.

Это нужно вызвать из метода Activity onPostCreate для синхронизация после восстановления состояния экземпляра DrawerLayout, и в любое другое время, когда государство может расходиться таким образом, чтобы ActionBarDrawerToggle не был уведомлен. (Например, если вы остановитесь пересылка соответствующих событий ящика в течение определенного периода времени.)

Далее я прочитал о onPostCreate() из sstn answer здесь: OnPostCreate in Fragment

onPostCreate() в основном предназначен для использования в каркасе (хотя вы можете переопределить его). Документы говорят, что он вызывается после onStart() и onRestoreInstanceState().

Это может привести к предположению, что он может быть вызван до onResume() и, вероятно, до того, как будет отправлен цикл сообщений событий (включая метод AsyncTask onPostExecute()), что означает onPostExecute() будет запускаться только после onPause().

Как onPostCreate() неправильно документировано и не предназначено для использования приложений - я мог бы сказать, что это не очень хорошая идея. полагайтесь на любое наблюдаемое поведение.

Из этих двух я ничего не мог понять. Что именно делает syncState() и почему оно должно быть внутри onPostCreate()? Может ли кто-нибудь объяснить это лучше?

4b9b3361

Ответ 1

Ну, я думаю, что этот вопрос как хороший. И я соберу этот вопрос и его ответы. Итак, сделайте несколько резюме здесь:

Сначала, как в ActionBarDrawerToggle.syncState(), так же, как документ говорит,

Синхронизировать состояние ящика indicator/affordance с связанный DrawerLayout.

Это нужно вызвать из вашего метода Activity onPostCreate, чтобы синхронизация после состояния экземпляра DrawerLayoutвосстановлено и в любое другое время, когда государство может расходиться в таких способ, чтобы ActionBarDrawerToggle не был уведомлен. (Например, если вы прекратите переадресацию соответствующих событий ящика на период время.)

Второй, что касается Activity.onPostCreate(Bundle), , он вызывается, когда запуск активности завершен (после того, как были вызваны onStart() и onRestoreInstanceState(Bundle)). Приложения обычно не реализуют этот метод; он предназначен для того, чтобы системные классы выполняли окончательную инициализацию после запуска кода приложения.

Но это производные классы должны переходить к реализации суперкласса этого метода. Если они этого не сделают, будет выбрано исключение.

Итак, Что делает syncState() точно?

Хорошо, ActionBarDrawerToggle.syncState() синхронизирует измененное состояние значка, которое депонирует на действия DrawerLayout. Если вы когда-либо пытались удалить syncState(), вы поймете, что значок стрелки больше не вращается.

И почему syncState() следует вызывать внутри onPostcreate()?

Ну, onPostcreate() вызывается, когда запуск активности завершен (после того, как были вызваны onStart() и onRestoreInstanceState(Bundle)), а в настоящий момент Activity требуется, чтобы анимация была готова к работе. Итак, если это не лучший момент для анимации, когда он?

Ответ 2

что делает syncState()

Он будет синхронизировать значок ящика, который вращается, когда ящик выталкивается с указателем влево или вправо, и если вы попытаетесь удалить syncState(), синхронизация завершится неудачно, что приведет к ошибочному вращению или даже не будет работать.

почему его следует вызывать внутри onPostCreate()?

Он вызывается в onPostCreate для синхронизации анимации снова, когда восстанавливается Activity. Хорошая вещь о onPostCreate заключается в том, что она называется сразу после onRestoreInstanceState

Edit:

Как указано в @Vikram, вы можете увидеть встроенную документацию метода syncState

Ответ 3

Вам нужно вызвать syncState() из вашей активности onPostCreate, чтобы установить состояние индикатора (значок + сам ящик) в зависимости от того, находится ли макет ящика в открытом или закрытом состоянии после восстановления активности с помощью onRestoreInstanceState.

Ответ 4

Просто скажите: SyncState() - синхронизировать состояние переключения после возникновения события onRestoreInstanceState. И вызвать его в onPostCreate(...) из-за этого onPostCreate(...) вызывается сразу после вызова onRestoreInstanceState(...).