3

Serializable を実装する Custom Type オブジェクトがあり、このオブジェクトをアクティビティに正常に渡すことができます。

現在の状況は次のとおりです。

アクティビティ 1 では、CustomObject インスタンスに値「A」が設定された String プロパティがあり、エクストラとしてアクティビティ 2 に渡されます。

Intent intent = new Intent(getApplicationContext(), Activity_2.class);
intent.putExtra("CUSTOM_OBJECT", customObjectInstance);

startActivityForResult(intent, 0);

アクティビティ 2 で、Intent から CustomObject を取得し、プロパティ値を "A" から "B" に変更します。

戻るボタンを押してアクティビティ 2 からアクティビティ 1 に戻ると、CustomObject のプロパティの値が再び「A」になります。

オブジェクトのハッシュ コードを確認し、両方のアクティビティで同じインスタンスであることを確認しましたが、なぜこれが発生しているのかまだわかりません。

編集:

要求どおり、プロパティ値を設定するコードについては、可能な限り単純です。

アクティビティ 2:

CustomObject obj = (CustomObject) getIntent().getExtras().getSerializable("CUSTOM_OBJECT");
obj.setProperty("B");
4

2 に答える 2

2

インテントのエクストラには値のみが含まれます。Application クラスを拡張し、「グローバル」変数を展開することで、参照によってパラメーターを処理できます。

両方のオブジェクトのハッシュ コードが同じであるとおっしゃいましたが、各アクティビティが独自のローカル変数セットを処理していることは確かです。テストでは、アクティビティ A と B のオブジェクトは互いに独立しています。

それが役に立てば幸い。

于 2013-04-24T21:19:29.903 に答える
0

結果を返すアクティビティで setResult(int) を呼び出していますか? 結果のアクティビティの開始に関するドキュメントは次のとおりです。

常に結果コードを提供する必要があります。これは、標準の結果 RESULT_CANCELED、RESULT_OK、または RESULT_FIRST_USER で始まる任意のカスタム値にすることができます。さらに、オプションで、必要な追加データを含む Intent を返すことができます。この情報はすべて、最初に提供された整数識別子とともに、親の Activity.onActivityResult() に表示されます。

子アクティビティが何らかの理由 (クラッシュなど) で失敗した場合、親アクティビティはコード RESULT_CANCELED で結果を受け取ります。

http://developer.android.com/reference/android/app/Activity.html#StartingActivities

于 2013-04-24T21:19:28.387 に答える