2012-07-31 10 views
5

私はオブジェクトへの参照を持っていると言いますが、これを1つのアクティビティから別のアクティビティに渡すにはどうすればよいですか?アクティビティから別のアクティビティへの参照(直列化不可)を渡すにはどうすればよいですか?

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

これはまだ可能ですか?

答えて

7

静的変数を別のアクティビティ、またはアプリケーションクラスのグローバル変数として宣言してから、タイプNewTypeのオブジェクトの一部をOldActivityからクラスNewActivityに解析するようなアクティビティにアクセスできます。次のようにしてください:

NewActivity.javaに静的なNewTypeのオブジェクトを宣言してください。

public static NewObject newObject=null; 

do次に、あなたがNewActivityを呼び出すとき。

NewActivity.newObject=item; 
Intent intent=new Intent(OldActivity.this, NewActivity.class); 
startActivity(intent); 
+0

こんにちは、私は、Activityが静的変数/アプリケーションオブジェクトに手を差し伸べることを望んでいません。 – kietdlam

+0

オブジェクトをインテントで渡したい場合は、Bundleを使うことができますが、バンドルに値を入れるにはパーセル化可能なオブジェクトでなければなりませんし、他の方法でデバイスを渡してオブジェクトを渡す必要がありますAndroid ActivityManager自体がアクティビティのコンストラクタを呼び出すため、コンストラクタでパラメータを渡すことはできません。私は他の方法はないと思う。 – jeet

+0

これは私が探していた答えではありませんでしたが、私が探していた振る舞いをサポートしていないフレームワークのためです。ありがとうございました! – kietdlam

1

次のいずれかの方法でそれを行うことができます。

  • は、オブジェクトの静的してください。 (もっとも簡単ですが、必ずしも効率的ではありません)
  • シリアライズ - >送信 - >受信 - >デシリアライズ。クラスがシリアライズ可能でない場合は、JSON decoding and encodingのようなものを使用することもできます。 Parcelable(最速、最も効率的な)

  • (あなたが正当な理由がない限り、あなたが、これを使用したくない、オーバーヘッドの多くが含まれます)ここではドキュメントからの例です:あなたはあなたをラップすることができます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(); 
        } 
    } 
    
  • -1

    ワン:

    あなたはたとえば

    が欲しい情報を運ぶためにシングルトンクラスを行うことができます。

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

    その後、それぞれのgetterメソッドとバック取得

    同期に関する問題を処理していることを確認してください。

    関連する問題