Где использовать методы onSaveInstanceState и onRestoreInstanceState? - PullRequest
0 голосов
/ 28 апреля 2018

Это концептуальная проблема. Извините, если это простой вопрос, я начинаю изучать Android несколько дней назад.

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

В этой статье https://panavtec.me/retain-restore-recycler-view-scroll-position методы:

protected Parcelable onSaveInstanceState();
protected void onRestoreInstanceState(Parcelable state);

В этой статье RecyclerView сохраняет / восстанавливает состояние между действиями методы:

protected void onSaveInstanceState(Bundle state)
protected void onRestoreInstanceState(Bundle state)

Эти две статьи претендуют на один и тот же вопрос о том, как восстановить состояние окна повторного использования.


Вопросы:

1 - Первая статья реализует эти методы в layoutManager !? Итак, я использую GridLayoutManager по умолчанию, поэтому для реализации экземпляра сохранения и восстановления в GridLayoutManager я должен создать свой собственный класс, расширяющий класс по умолчанию?

2 - Могу ли я реализовать эти методы в менеджере макетов независимо от их реализации в упражнении?

3 - Где находится правильное место для реализации этих методов? или есть официальный ответ на вопрос: «Как восстановить состояние рециркулятора?»

Мне нужны мнения по этим трем вопросам, а не полная реализация.

1 Ответ

0 голосов
/ 30 апреля 2018

1 - Первая статья реализует эти методы в layoutManager !? Итак, я использую GridLayoutManager по умолчанию, чтобы реализовать сохранение и восстановить экземпляр в GridLayoutManager Я должен создать свой собственный класс расширение класса по умолчанию?

Если вы посмотрите и статью, и сообщение SO, они не реализуют ничего внутри LayoutManager, они просто используют методы, которые уже существуют. Если вы посмотрите на странице документации для GridLayoutManager , то уже есть методы onSaveInstanceState() и onRestoreInstanceState (Parcelable state) (эти два метода являются «удобным API», который блог упоминает в начале).

Как я уверен, вы заметили, GridLayoutManager наследуется от LinearLayoutManager официальная документация LinearLayoutManager.onSaveInstanceState () :

Вызывается, когда LayoutManager должен сохранить свое состояние. [...] Возвращает: Parcelable Необходимая информация для LayoutManager, чтобы иметь возможность восстановить его состояние

официальная документация LinearLayoutManager.onRestoreInstanceState (состояние Parcelable) Очень неполный, но вы можете сказать, что он использует тот же параметр Parcelable, возвращаемый LinearLayoutManager.onSaveInstanceState ()

2 - я могу реализовать эти методы в компоновщике независимо от реализовать их в деятельности?

Для ясности: не нужно повторно реализовывать LayoutManager. Я не понимаю, зачем вам это нужно, методы есть и готовы к использованию. Методы Activity с тем же именем - это то, что вам нужно реализовать.

3 - Где находится правильное место для реализации этих методов? или есть официальный ответ на вопрос: «Как восстановить состояние recyclerview? "

Правильное место для этого - методы жизненного цикла Действия, которые будут вызываться в подходящее время для сохранения и восстановления вашего состояния LayoutManager. Цитируя SO ответ, который вы упомянули:

//---> this is the Activity's onSaveInstanceState
protected void onSaveInstanceState(Bundle state) {
     super.onSaveInstanceState(state);

     // Save list state
     mListState = mLayoutManager.onSaveInstanceState();
     state.putParcelable(LIST_STATE_KEY, mListState);
}

//---> this is the Activity's onRestoreInstanceState
protected void onRestoreInstanceState(Bundle state) {
    super.onRestoreInstanceState(state);

    // Retrieve list state and list/item positions
    if(state != null)
        mListState = state.getParcelable(LIST_STATE_KEY);
}

//---> this is the Activity's onResume
@Override
protected void onResume() {
    super.onResume();

    if (mListState != null) {
        mLayoutManager.onRestoreInstanceState(mListState);
    }
}

Я не видел никакой официальной документации о , в частности восстановлении состояния RecyclerView / LayoutManager, но тема жизненного цикла очень важна в Android. Я считаю, что после полного понимания этого можно принять правильные решения в отношении конкретных вариантов использования.

Надеюсь, это поможет;)

...