我对在这里发布问题完全陌生,但是多年来我一直在这里阅读很多内容。通常我总是能够通过彻底搜索网络找到我的答案,但这次我不知所措......
在花了一天的时间试图弄清楚为什么这不起作用之后,我决定寻求帮助,希望你们能给我一些建议,或者更好的解决方案。
问题:在Android游戏中,当用户按下主屏幕按钮时,我必须让应用程序记住它的状态。经过一些搜索后,我意识到为了让我的类在重新打开应用程序后初始化回适当的状态,我必须支持 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。
我在这里想念什么?
任何帮助/想法将不胜感激。