私のプログラムには、さまざまなクラスのアクティビティ(基本的に異なる画面)があります。1つのアクティビティで、他のアクティビティでアクセスしたい複数のオブジェクトを作成しています。
これらのオブジェクトをプログラム内の他のアクティビティにアクセスできるようにするにはどうすればよいですか。つまり、オブジェクトを他のアクティビティと共有するにはどうすればよいですか。
TIA
マーク
私のプログラムには、さまざまなクラスのアクティビティ(基本的に異なる画面)があります。1つのアクティビティで、他のアクティビティでアクセスしたい複数のオブジェクトを作成しています。
これらのオブジェクトをプログラム内の他のアクティビティにアクセスできるようにするにはどうすればよいですか。つまり、オブジェクトを他のアクティビティと共有するにはどうすればよいですか。
TIA
マーク
そのクラスにParcelableを実装する必要があります 。これは、基本的に Java のシリアライズ可能に似ています。自分自身をパックおよびアンパックする方法をクラスに指示する必要があります。次に、intent.putExtra(); を介してインテントに入れるだけです。
そのリンクから取得したコード例を次に示します
public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
最初に解決する必要があるのは、操作の順序です。アクティビティ A が共有オブジェクトを持つアクティビティである場合、アクティビティ A が初期化されずにアクティビティ B が実行されたらどうしますか? アクティビティを開始する意図はどこからでも来る可能性があることを覚えておいてください。ただし、正直に言うと、NULL ポインターの逆参照で終了することは許容できる応答です。
そのようなことが必要なときに私がしたことは、共有オブジェクトをアクティビティの一部にせず、それらを含むための特定のオブジェクトを作成することでした。次に、そのオブジェクトへの静的参照をオブジェクト内に格納し、静的メソッドを介して返すことができます。
public class GlobalParams {
private static reference;
public static GlobalParams getReference()
{
if( reference==NULL )
reference=new GlobalParams();
return reference;
}
}
さまざまなアクティビティが使用するための個別のコピーが作成されるため、parcelable は役に立たないと思います。
シャチャー