2

在我的代码中,我创建了一个卡片类;我稍后在网格视图中显示一堆卡片。在屏幕方向更改时,我丢失了所有卡片;在我之前的问题中,我被指出了正确的方向。

现在,我在 Android 文档和 StackO 中发现的是

@Override
    protected void onSaveInstanceState(Bundle outState) {
    outState.putInt(...);
    super.onSaveInstanceState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    some_int_var = savedInstanceState.getInt(...);
super.onRestoreInstanceState(savedInstanceState);

}

现在,我这样做了,因为 Bundle 对象有几个方法,如 putString、Char 等。原语加上字符串。但是我的卡呢?它们是向量中的 Card 对象,因此我不能使用任何这些方法。

如何在不使用 onRetainNonConfigurationInstance 或阻止活动重置的情况下恢复该向量?在 Android 文档中,如果需要重新启动大量数据,建议执行此操作,但这不是我的情况。

4

2 回答 2

5

对于您自己的对象,您可以使用putParcelable()

要使您的对象可打包,您应该实现Parcelable并按照以下示例来实现它。

http://prasanta-paul.blogspot.nl/2010/06/android-parcelable-example.html

所以:

public class ParcelData implements Parcelable {
    String name;

    ParcelData (Parcel source) {
        name = source.readString();
    }       

    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
    }

    public class MyCreator implements Parcelable.Creator<ParcelData> {
        public ParcelData createFromParcel(Parcel source) {
            return new ParcelData(source);
        }
        public ParcelData[] newArray(int size) {
             return new ParcelData[size];
        }
    }
}
于 2012-08-10T11:27:54.320 回答
4

首先 - 你可以通过意图复杂的对象。

这样做的原因是让你的类实现Serializable接口 or Parcelable,然后使用intent.getSerializableExtra(keyName);orintent.getParcelableExtra(); Serializable更容易实现(基本上将你的类声明为实现它就足够了)但是某些特定的类不能序列化,而实现Parcelable需要更多工作,但总是可能的。

其他选项 - 将您需要保存的数据保存在一些带有 getter 和 setter 的单音类中,以保存您想要保存的任何内容,并在代码中随时随地使用它:将数据保存在onSaveInstanceState方法中并获取它回到onRestoreInstanceState方法。

于 2012-08-10T11:27:14.990 回答