Fragment.getArguments() возвращает переданные аргументы после изменений конфигурации?

Извините за мой английский

Должен ли я сохранить и восстановить аргументы (возвращается getArguments()) во время изменения конфигурации через outState \ savedInstanceState?

Или же getArguments() всегда возвращает переданные аргументы даже после изменения конфигурации?

4 ответа

Короткий ответ

Я могу только ответить Нет.


Полный ответ

Вам не нужно сохранять свои аргументы, это будет сделано автоматически.

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

В Android поддержка библиотеки v4

Android-SDK / дополнения / Android / поддержка / v4 / SRC / Java / Android / поддержка / v4 / приложение / Fragment.java

У вас есть метод:

public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(mClassName);
    dest.writeInt(mIndex);
    dest.writeInt(mFromLayout ? 1 : 0);
    dest.writeInt(mFragmentId);
    dest.writeInt(mContainerId);
    dest.writeString(mTag);
    dest.writeInt(mRetainInstance ? 1 : 0);
    dest.writeInt(mDetached ? 1 : 0);
    dest.writeBundle(mArguments);//<---------------------------- Look here
    dest.writeBundle(mSavedFragmentState);
}

куда mArgument является:

/**
 * Supply the construction arguments for this fragment.  This can only
 * be called before the fragment has been attached to its activity; that
 * is, you should call it immediately after constructing the fragment.  The
 * arguments supplied here will be retained across fragment destroy and
 * creation.
 */
public void setArguments(Bundle args) {
    if (mIndex >= 0) {
        throw new IllegalStateException("Fragment already active");
    }
    mArguments = args;
}

И в

/**
* State information that has been retrieved from a fragment instance
* through {@link FragmentManager#saveFragmentInstanceState(Fragment)
* FragmentManager.saveFragmentInstanceState}.
*/
public static class SavedState implements Parcelable {
    final Bundle mState;

    SavedState(Bundle state) {
        mState = state;
    }

    SavedState(Parcel in, ClassLoader loader) {
        mState = in.readBundle();
        if (loader != null && mState != null) {
            mState.setClassLoader(loader);
        }
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeBundle(mState);
    }

    public static final Parcelable.Creator<SavedState> CREATOR
            = new Parcelable.Creator<SavedState>() {
        public SavedState createFromParcel(Parcel in) {
            return new SavedState(in, null);
        }

        public SavedState[] newArray(int size) {
            return new SavedState[size];
        }
    };
}

это выполнено. Как в комментарии вы можете прочитать это используется:). Также я проверил код и да, он сохранен.

В FragmentManager.java

@Override
public Fragment.SavedState saveFragmentInstanceState(Fragment fragment) {
    if (fragment.mIndex < 0) {
        throwException( new IllegalStateException("Fragment " + fragment
                + " is not currently in the FragmentManager"));
    }
    if (fragment.mState > Fragment.INITIALIZING) {
        Bundle result = saveFragmentBasicState(fragment);
        return result != null ? new Fragment.SavedState(result) : null;
    }
    return null;
}

Также я проверил это несколько раз на Android, и он все еще выглядит, что он работает:)

Да, Android сохраняет переданные аргументы после изменения конфигурации.

Кажется, это так. Проверьте здесь

Это говорит;

Укажите аргументы конструкции для этого фрагмента. Это можно вызвать только до того, как фрагмент был прикреплен к его активности; то есть вы должны вызывать его сразу после создания фрагмента. Аргументы, представленные здесь, будут сохранены при уничтожении и создании фрагмента.

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

Другие вопросы по тегам