фрагмент андроїда наRestoreInstanceState


120

Я щось пропускаю чи у мене Fragmentнемає onRestoreInstanceState()методу? Якщо ні, то як я можу досягти чогось подібного?

Відповіді:


200

Фрагменти не мають onRestoreInstanceStateметоду.

Ви можете досягти того ж результату onActivityCreated, що отримує пакет із збереженим станом екземпляра (або null).

Перевірте вихідний код тут .


90
Це не однаковий дизайн, чи не так?
Ехтеш Чудхурі

4
Це також не піклується про відновлення фрагмента? його штраф за зміни конфігурації, але що робити, якщо ви переходите до дії з фрагмента, а потім повертаєтесь до фрагмента?
speedynomads

1
Фрагменти повинні належати до активності, для початку, тому якщо ви збережете фрагмент, він зберігає батьківську активність. Отже, якщо ви залишите цей фрагмент (який належить до активності) і повернетеся до фрагмента, усі значення потім будуть відновлені з батьківської діяльності
Shaun

3
onActivityCreate () - не єдиний метод відновлення стану фрагмента. Ви можете відновити його під час onCreate (), onCreateView () або onActivityCreate (). developer.android.com/guide/components/fragments.html
shaby

1
@EhteshChoudhury Ніщо в розробці додатків для Android не є "послідовним дизайном". Це все переплутано, і все "застаріло".
Karanveer Singh

43

Я знаю, що ви прийняли відповідь, але ви повинні прочитати офіційну документацію про фрагменти , і вона говорить (параграф "Поводження з життєвим циклом фрагмента"):

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

Таким чином, ви можете використовувати , що підходить вам найкраще: onCreate(), onCreateView()абоonActivityCreated()


29

У прикладі СписокFragment посібника з фрагментів ви можете знайти:

@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().

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.