Android-фрагмент onRestoreInstanceState

120

Я что-то упустил или у меня Fragmentнет onRestoreInstanceState()метода? Если нет, как мне достичь чего-то подобного?

Shaun
источник

Ответы:

200

У фрагментов нет onRestoreInstanceStateметода.

Вы можете добиться того же результата в onActivityCreated, который получает бандл с сохраненным состоянием экземпляра (или null).

Проверьте исходный код здесь .

МГВ
источник
90
Это не согласованный дизайн, не так ли?
Ehtesh Choudhury
4
Это также не заботится о возобновлении фрагмента, не так ли? это нормально для изменений конфигурации, но что, если вы перейдете к действию из фрагмента, а затем вернетесь к фрагменту?
speedynomads 04
1
Фрагменты должны изначально принадлежать действию, поэтому, если вы сохраняете фрагмент, он сохраняется в родительском действии. Поэтому, если вы оставите этот фрагмент (который принадлежит активности) и вернетесь к фрагменту, все значения будут восстановлены из родительского действия
Шон
3
onActivityCreated () - не единственный метод восстановления состояния фрагмента. Вы можете восстановить его во время onCreate (), onCreateView () или onActivityCreated (). developer.android.com/guide/components/fragments.html
shaby
1
@EhteshChoudhury Ничто в разработке приложений для Android не является «последовательным дизайном». Все испортилось и все "устарело".
Каранвир Сингх
43

Я знаю, что вы приняли ответ, но вам следует прочитать официальную документацию по фрагментам , и в ней говорится (параграф «Обработка жизненного цикла фрагмента»):

Вы можете сохранить состояние фрагмента с помощью Bundle на случай, если процесс действия будет убит, и вам нужно восстановить состояние фрагмента при воссоздании действия. Вы можете сохранить состояние во время обратного вызова фрагмента onSaveInstanceState () и восстановить его во время onCreate (), onCreateView () или onActivityCreated ()

Таким образом, вы можете использовать , что подходит вам лучше всего: onCreate(), onCreateView()илиonActivityCreated()

jimpanzer
источник
29

В примере ListFragment из руководства по фрагментам вы можете найти:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("curChoice", mCurCheckPosition);
}

Что вы можете использовать так:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
        // Restore last state for checked position.
        mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
    }
}

onActivityCreated() вызывается после того, как фрагмент возвращается из стека.

Гаурав Дарджи
источник
13

onViewStateRestoredиз Fragmentявляется эквивалентом onRestoreInstanceStateиз Activity. Но это называется после onActivityCreated(Bundle)и до onStart().

nhkhanh
источник