Android сохраняет состояние активности в объекте класса Parcelable

в моем приложении я много onSaveInstanceState в каждом действии и файле, теперь после прочтения эта ссылка для создания класса Parcelable я не могу использовать это и сохранить в этом классе

по умолчанию onSaveInstanceState:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putBoolean("IsShowingExitDialogs", mIsShowingExitDialogs);
    savedInstanceState.getInt("LastMenuItemSelected", mLastMenuItemSelected);
}

теперь я не могу использовать эту строку ниже, чтобы сохранить IsShowingExitDialogs или LastMenuItemSelected в класс Parcable:

savedInstanceState.putParcelable("IsShowingExitDialogs", mIsShowingExitDialogs);
savedInstanceState.putParcelable("IsShowingExitDialogs", mLastMenuItemSelected);

person DolDurma    schedule 03.03.2015    source источник
comment
ты видел мой ответ? до чего ты дошел с этим?   -  person Y.S    schedule 07.05.2016


Ответы (1)


Parcelable – это интерфейс, применяемый к классам. Это работает для объектов, тогда как в вашем случае вы пытаетесь сохранить целое число и логическое значение, оба из которых являются примитивными типами. . Если вы действительно хотите это сделать, вам нужно обернуть их внутри класса, реализующего Parcelable. Тогда это сработает.

ИЗМЕНИТЬ:

1. savedInstanceState, который вы сохранили в onSavedInstanceState(), возвращается в onCreate() при повторном создании Activity, что позволяет повторно использовать ранее сохраненные данные.

2. Вам необходимо создать собственный класс MyClass extends Parcelable, реализовать методы интерфейса и сохранить его следующим образом:

MyClass myClass = new MyClass(mIsShowingExitDialogs, mLastMenuItemSelected);
savedInstanceState.putParcelable("myClass", myClass);
person Y.S    schedule 03.03.2015
comment
вы нигде не сохраняете savedInstanceState, savedInstanceState — это объект, содержащий данные, которые вы хотите сохранить, и к которым повторно обращаются в onCreate(). Вам нужно создать класс MyClass, содержащий логическое и целое число, которое вы хотите сохранить, и реализовать интерфейс Parcelable в этом классе. Затем сохраните экземпляр этого класса в объекте savedInstanceState. См. отредактированный ответ - person Y.S; 03.03.2015