Я совершенно новичок в размещении вопросов здесь, однако я много читал здесь много лет. Обычно я всегда могу найти ответы, тщательно просматривая веб-страницы, но на этот раз я в недоумении...
Проведя еще один день, пытаясь понять, почему это не работает, я решил обратиться за помощью, надеясь, что вы, ребята, можете дать мне несколько указателей или, лучше, решение.
Проблема: В Android-игре я пришел к тому моменту, когда я должен заставить приложение запомнить его состояние, когда пользователь, например. нажимает кнопку HOME. После некоторых поисков я понял, что для того, чтобы мои классы инициализировались обратно в соответствующие состояния после повторного открытия приложения, мне пришлось поддерживать интерфейс Parcelable, чтобы передать их с помощью Bundle.
В моих onStop и onStart-функциях я соответственно сохраняю и восстанавливаю состояние игры в Bundle и из него, однако, когда я вызываю функции putParcelable и getParcelable на Bundle, объекты writeToParcel и createFromParcel никогда не вызывают.
Опасаясь, что это связано с относительной сложностью игры, я решил, что лучше всего создать очень простое приложение, чтобы попытаться заставить его работать.
Основываясь на многочисленных примерах, которые я видел в Интернете, это стало моим классом:
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) не приведет к соответствующим методам Parcelable в моем тестовом классе.
Самое странное, что он как-то читает правильные значения (я пробовал с большим количеством переменных в классе), но моя отладка и мой журнал показывают, что приложение никогда не получает writeToParcel и createFromParcel.
Что мне здесь не хватает?
Любая помощь/мысли будут оценены.