Я совершенно новичок в публикации здесь вопросов, однако я много читаю здесь годами.Обычно я всегда могу найти свои ответы, тщательно просматривая сеть, но на этот раз я в растерянности ...
Потратив еще один день на попытки выяснить, почему это не работает, я решилобратиться за помощью, надеясь, что вы, ребята, можете дать мне несколько советов или, что лучше, решение.
Проблема: в игре для Android я пришел к тому, что я должен заставить приложение запомнить его состояниекогда пользователь, например, нажимает кнопку HOME-screen.После некоторых поисков я понял, что для того, чтобы мои классы инициализировались обратно в соответствующие состояния после повторного открытия приложения, мне пришлось поддерживать интерфейс Parcelable для передачи их с помощью Bundle.
В моих функциях onStop и onStartЯ соответственно сохраняю и восстанавливаю состояние игры в Bundle и из Bundle, однако, когда я вызываю функции putParcelable и getParcelable в Bundle, функции writeToParcel и createFromParcel объекта никогда не вызываются.
Опасаясь, что это могло произойтиотносительная сложность игры, которую я решил, мне лучше всего создать очень простое приложение, чтобы попытаться заставить его работать.
Основываясь на множестве примеров Parcelable, которые я видел в Интернете, это стало моим классом:
public class ParcelableTest implements Parcelable {
int id;
public ParcelableTest(int newID)
{
id = newID;
}
private ParcelableTest(Parcel in) {
readFromParcel(in);
}
public void writeToParcel(Parcel out, int arg1) {
writeToParcel(out);
}
public void writeToParcel(Parcel out) {
Log.v("ParcelableTest","Writing to parcel");
out.writeInt(id);
}
public void readFromParcel(Parcel in) {
id = in.readInt();
}
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<ParcelableTest> CREATOR = new
Parcelable.Creator<ParcelableTest>() {
public ParcelableTest createFromParcel(Parcel in) {
Log.v("ParcelableTest","Creating from parcel");
return new ParcelableTest(in);
}
public ParcelableTest[] newArray(int size) {
return new ParcelableTest[size];
}
};
}
И из моего основного занятия я бы вызвал следующие функции для сохранения / восстановления данных:
public Bundle saveToBundle(Bundle savedState)
{
savedState.putParcelable("Test1",mTest1);
savedState.putParcelable("Test2",mTest2);
return savedState;
}
public void restoreFromBundle(Bundle savedState)
{
mTest1 = savedState.getParcelable("Test1");
mTest2 = savedState.getParcelable("Test2");
}
Но по какой-то причине ни одна из функций (с функциями putParcelable и getParcelable) не приведет ксоответствующий Павызовы rcelable в моем тестовом классе.
Самое странное, что он каким-то образом читает правильные значения (я пробовал с большим количеством переменных в классе), но моя отладка и мой журнал показывают, что приложение никогда не попадает вwriteToParcel и createFromParcel.
Что мне здесь не хватает?
Буду признателен за любую помощь / мысли.