2012-01-03 21 views
2

私はParcelableインターフェイスを実装するクラスを持っています。 HashMapを含むこのHashMapには、ビットマップイメージが含まれています。私はすべての私の活動のためにこれが必要ですHashMap。だから私はParcelableを使った。私のParcelableコードを見てください。AndroidでParcelableオブジェクトを再利用するにはどうすればよいですか?

private HashMap<String, Bitmap> map; 

     public ParcelFullData() { 
      map = new HashMap(); 
     } 

     public ParcelFullData(Parcel in) { 
      map = new HashMap(); 
      readFromParcel(in); 
     } 

     public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 
      public ParcelFullData createFromParcel(Parcel in) { 
       return new ParcelFullData(in); 
      } 

      public ParcelFullData[] newArray(int size) { 
       return new ParcelFullData[size]; 
      } 
     }; 

     public int describeContents() { 
      return 0; 
     } 

     public void writeToParcel(Parcel dest, int flags) { 
      dest.writeInt(map.size()); 
      for (String s: map.keySet()) { 
       dest.writeString(s); 
       dest.writeValue(map.get(s)); 
      } 
     } 

     public void readFromParcel(Parcel in) { 
      int count = in.readInt(); 
      for (int i = 0; i < count; i++) { 
       map.put(in.readString(), (Bitmap)in.readValue(Bitmap.class.getClassLoader())); 
      } 
     } 

     public Bitmap get(String key) { 
      return map.get(key); 
     } 

     public String[] getKeys() { 
      Set<String> mapset = map.keySet(); 
      String[] photoName = new String[mapset.size()]; 
      Iterator<String> itr = mapset.iterator(); 
      int index = 0; 
      while (itr.hasNext()) { 
       String name = itr.next(); 
       photoName[index] = name; 
       index++; 
      } 
      return photoName; 
     } 

     public void put(String key, Bitmap value) { 
      map.put(key, value); 
     } 

     public HashMap<String, Bitmap> getHashMap() { 
      return map; 
     } 

私は別のActivityに1 Activityを渡すときに、この意志が正常に動作。(Activity Bに例Activity Aため。)しかし、私は別の活動にこれを渡すと(Activity Cに例Activity Bください。)HashMapはありませんが含まれていることを意味し要素。そのサイズは、私がActivity Cで同じことをやっている、Activity_AでActivity_B

ParcelFullData parcelData = (ParcelFullData)bundle.getParcelable("parcelData"); 

Parcel parcel = Parcel.obtain(); 
parcel.writeParcelable(parcelData , 0); 
parcelData.writeToParcel(parcel, 0); 
Intent setIntent = new Intent(activity_a, Activity_B.class); 
Bundle b = new Bundle(); 
b.putParcelable("parcelData", parcelData); 
startActivity(setIntent); 

Intent setIntent = new Intent(activity_a, Activity_B.class); 

ParcelFullData parcelData = new ParcelFullData(); 

Bundle b = new Bundle(); 
b.putParcelable("parcelData", parcelData); 
startActivity(setIntent); 

です。

これを解決するには?

+0

どのように、あなたはこのparcelableオブジェクトを取得し、さらに通過していますか?ここにコードを提供できますか? – Yury

+0

@ Yury、私の更新を見てください。 – bharath

+0

チェックアウト[this one](http://blog.cluepusher.dk/2009/10/28/writing-parcelable-classes-for-android/) –

答えて

1

なぜbundleを使用しますか?このバンドルをインテントに追加しないでください。 Intent.putExtra(String, Parcelable)を使用すれば、すべてがOKです。私は1つのParcelableオブジェクトを私のアプリのすべてのアクティビティを通して渡し、正常に動作します。最初の活動で

:第二の活動で

Intent i = new Intent(activity_a, Activity_B.class); 
i.putExtra("parcelData", parcelData); 

parcelData = getIntent().getParcelableExtra("parcelData"); 
// ... do anything with parcelData here 
Intent i = new Intent(activity_b, Activity_C.class); 
i.putExtra("parcelData", parcelData); 
+0

@ジン、私のコードをテストしていますか?あなたはそのコードで投稿できますか? – bharath

+0

私の編集した答えを読む – Jin35

+0

@ジン、それを得ました。私は 'Bundle'を使用しました。これが問題です。今はその仕事。 – bharath

関連する問題