2017-08-02 18 views
0

以下は私のParcelableクラスの例です。ご覧のとおり、私はParcelにアクティビティを入れたいですが、どうすればいいですか?私はActivityのソースコードを調べますが、ParcelableでもSerializableでもありません。アクティビティを小包に入れることは可能ですか?

public class MyParcelable implements Parcelable { 
    private Activity mActivity; 
    private int mData; 
    private String mName; 

    @Override 
    public void writeToParcel(Parcel out, int flags) { 
     //out.writeX(mActivity); 
     out.writeInt(mData); 
     out.writeString(mName); 
    } 

    private MyParcelable(Parcel in) { 
     //mActivity = in.readX(); 
     mData = in.readInt(); 
     mName = in.readString(); 
    } 

    public MyParcelable(Activity activity, int data, String name) { 
     mActivity = activity; 
     mData = data; 
     mName = name; 
    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    public static final Parcelable.Creator<MyParcelable> CREATOR 
      = new Parcelable.Creator<MyParcelable>() { 

     @Override 
     public MyParcelable createFromParcel(Parcel in) { 
      return new MyParcelable(in); 
     } 

     @Override 
     public MyParcelable[] newArray(int size) { 
      return new MyParcelable[size]; 
     } 
    }; 
} 
+1

小包で 'Activity'を置くことの必要性は何ですか?いいえ、また、それはあなたが最も可能性が高い何をしたいのかずっと意味 –

+3

することは、あなたはStringとしてその名を送信することができます。アクティビティ自体は「単なるクラス」ではなく、画面内にコンテンツを表示する大規模なシステムの一部であり、それ自体では、自分自身を再構築するために必要なものすべてが含まれていません。 – Selvin

+1

は、Activityクラスを送信することであることはありません – etan

答えて

0

あなたは小包で何かを入れて小包のうち、何かを取ることができます。しかし、「何か」がその後に働くかどうかは、さまざまな要因に左右されます。

すべてのアクティビティのインスタンスは、AndroidのActivityManagerとの緊密な協力に存在します。 ActivityManager、ViewManager、PackageManager、および他のシステムサービスの方法にstartActivity()finish()restart()setContentView()getPackage()デリゲート:アクティビティを定義する方法のほとんど。これらのメソッドは、アクティビティがシステムによって破棄された後は機能しません。これらのメソッドは、Androidの「特別なソース」なしでアクティビティクラスをインスタンス化しても機能しません。リフレクションやJNIを使​​用してActivityクラスをインスタンス化することは技術的には可能ですが、単純なインスタンスは機能しません。

彼らはその活動が「アンドロイドによって管理」されたと言うとき、これは、人々が何を意味するかである:それは基本的にOSのプロセスによって駆動され、それらのプロセスとの通信なしでは存在できません。幸運にも、Androidにはそのようなコミュニケーションを開始する方法があります:Intent

private Intent mActivity; 

private Activity mActivity; 

そして、あなたが他の側にそれを受け取ったら、活動を開始するパーセルテントを使用します。この行を置き換えます。もちろん、あなたのアクティビティを使用可能な形にするためにIntent以外のものが必要な場合は、それらをParcelable内のIntentと一緒に保存する必要があります。

0

これは、小包に活動を置くのは良いアイデアではありません。これを行う必要がある場合、おそらくあなたのコードは悪いですし、この実装を避けるためにコードを見直す必要があります。

関連する問題