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 を実装させ、 orをParcelable使用することです。実装は簡単ですが (基本的には、クラスを実装していると宣言するだけで十分です)、一部の特定のクラスはシリアル化できませんが、実装にはもう少し必要です。動作しますが、常に可能です。intent.getSerializableExtra(keyName);intent.getParcelableExtra(); SerializableParcelable

他のオプション - 保存したいものを保存するためのゲッターとセッターを使用して、singeltone クラスに保存する必要があるデータを保持し、いつでもどこでもコードで使用できます。onSaveInstanceStateメソッドにデータを保存し、それを取得します。メソッドに戻りonRestoreInstanceStateます。

于 2012-08-10T11:27:14.990 に答える