5

オブジェクトへの参照があるとしましょう。これをあるアクティビティから別のアクティビティに渡すにはどうすればよいですか?

アプリケーションオブジェクト/シングルトン/静的変数をクエリする必要はありません。

これはまだ可能ですか?

4

3 に答える 3

11

別のアクティビティで静的変数を宣言するか、Applicationクラスでグローバル変数を宣言してから、OldActivityからクラスNewActivityへのタイプNewTypeのオブジェクトを解析する場合など、任意のアクティビティにアクセスできます。次のようにします。

NewActivity.javaで静的NewTypeのオブジェクトを宣言します。

public static NewObject newObject=null;

NewActivityを呼び出すときに、以下を実行します。

NewActivity.newObject=item;
Intent intent=new Intent(OldActivity.this, NewActivity.class);
startActivity(intent);
于 2012-07-31T05:02:43.590 に答える
1

次のいずれかの方法で実行できます。

  • オブジェクトを静的にします。(最も簡単ですが、常に効率的とは限りません)
  • シリアライズ -> 送信 -> 受信 -> デシリアライズ . クラスがシリアル化できない場合は、JSON のデコードやエンコードなども使用できます。(多くのオーバーヘッドを伴います。正当な理由がない限り、これを使用したくありません)
  • パーセル可能(最も効率的、最速)

ドキュメントの例を次に示します。オブジェクトを でラップparcelableし、インテントにアタッチして、受信アクティビティで「ラップ解除」できます。

 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();
     }
 }
于 2012-07-31T05:03:30.300 に答える
0

解決策の1つ:

必要な情報を運ぶシングルトンクラスを作成できます

例えば:

StorageManager.getInstance().saveSomething(Object obj);

次に、それぞれのゲッターメソッドで取得します

同期の問題に注意してください;)

于 2012-07-31T05:17:19.577 に答える