私のアプリには 2 つのアクティビティが含まれています。アクティビティ A は、アプリを起動して作成されるアクティビティです。この例では、独自のクラス MyClass のオブジェクトを作成します。このクラスには、1 つの文字列と 3 つの整数が含まれます。アクティビティ A では、このオブジェクトが書き込まれます。2 番目のアクティビティ B は、このオブジェクトを読み取る必要があります。AからBに渡すにはどうすればよいですか?または、他の解決策はありますか?
3 に答える
あるアクティビティから別のアクティビティにオブジェクトを渡すには、いくつかの方法があります。
1.アプリケーション クラス: このクラスはすべてのアプリケーション アクティビティから参照できるため、あるアクティビティからこのクラスにオブジェクトを保存し、別のアクティビティからアクセスできます。
2.クラスを単純な変数 (文字列と 3 つの整数) に分解し、それらをバンドルまたはインテント自体を介してあるアクティビティから別のアクティビティに渡し、オブジェクトを再度構築することができます。
Intent intent = new Intent (this, TargetActivity.class);
intent.putExtra(KEY, value);
intent.putExtra(KEY, "value");
startActivity(intent);
3.オブジェクトが Serializable/Parcelable を実装している場合は、バンドルを介して渡すことができます。
オブジェクトをシリアル化する方法の例:
アクティビティ間でアプリケーションが強制終了されないという保証はないため、注意が必要です。実際には、アクティビティ中に強制終了される可能性があるため、永続オブジェクトを維持するのは難しい場合があります。
これを行うための私の好ましい方法は、ぶらぶらしたいデータを保持する単一のインスタンスを作成することを目的としたクラスを作成する「シングルトンパターン」です。アプリケーションが強制終了された場合、シングルトン インスタンスは失われ、再作成する必要がありますが、すべての Android アプリは常にこのリスクを冒しています。
Androidでのシングルトンの実装については、Android で同じアクティビティの複数のインスタンスの状態を保存するを参照してください。
ああ、これは、すべてのアクティビティが同じプロセス内にあり、同じアドレス空間を共有しているアプリケーション内でのみ機能することを付け加えておきます。それ以外の場合は、オブジェクトをシリアライズ可能にして、ファイルに書き出す必要があります。
1 つのオプションとして、Serializable インターフェイスを実装することができます。その後、Intent#putExtra() メソッドの putExtra(Serializable..) バリアントを使用して、インテント エクストラでオブジェクト インスタンスを渡すことができます。
//to pass :
intent.putExtra("MyClass", obj);
// to retrieve object in second Activity
getIntent().getSerializableExtra("MyClass");