2012-01-03 79 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到另一個Activity。(例如Activity AActivity B)。但是如果我通過這次到另一個活動(例如Activity BActivity C。)表示HashMap不含元素。這大小爲0

在Activity_A,

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

ParcelFullData parcelData = new ParcelFullData(); 

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

在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); 

我做同樣的Activity C

如何解決這個問題?

+0

如何和你在哪裏獲得,並進一步通過這個parcelable對象?你能在這裏提供代碼嗎? – Yury 2012-01-03 09:57:29

+0

@ Yury,看看我的更新。 – bharath 2012-01-03 10:06:42

+0

查看[this one](http://blog.cluepusher.dk/2009/10/28/writing-parcelable-classes-for-android/) – 2012-01-03 10:18:48

回答

1

爲什麼使用bundle?您不要將此捆綁包添加到意圖。使用Intent.putExtra(String, Parcelable),一切都會好的。我通過一個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

@ Jin,你測試了我的代碼嗎?你可以發佈該代碼嗎? – bharath 2012-01-03 11:43:38

+0

閱讀我編輯的答案 – Jin35 2012-01-03 12:37:35

+0

@ Jin,明白了。我使用了'Bundle'。這就是問題。現在它的工作。 – bharath 2012-01-03 14:01:54

相關問題