我完全是新手,在这里发布问题,但我已经在这里阅读了很多年。通常情况下,通过彻底搜索网络,我总能找到答案,但这一次我不知所措...
在又度过了一天试图弄清楚为什么它不能工作后,我决定寻求帮助,希望你们能给我一些指针,或者更好的解决方案。
问题: 在一个Android游戏中,当用户按HOME键等操作时,我必须让应用程序记住其状态。经过一些搜索,我意识到为了使我的类在重新打开应用程序后能够初始化回到其适当的状态,我必须支持Parcelable接口以通过Bundle传递它们。
在我的onStop和onStart函数中,我分别将游戏状态保存到和从Bundle中恢复,但是当我在Bundle上调用putParcelable和getParcelable函数时,对象的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函数都无法导致适当的Parcelable调用。
最奇怪的是它确实以某种方式读取了正确的值(我已经尝试使用类中的更多变量),但我的调试和日志显示应用程序从未到达writeToParcel和createFromParcel。
我在这里缺少什么?
任何帮助/想法将不胜感激。