2012-01-03 2 views
2

나는 Parcelable 인터페이스를 구현하는 클래스를 가지고있다. HashMap을 포함하는이 HashMap에는 비트 맵 이미지가 포함되어 있습니다. 모든 활동에 대해이 번호가 필요합니다. HashMap. 그래서 Parcelable을 사용했습니다. 내 Parcelable 코드를 확인하십시오.안드로이드에서 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 A하십시오. Activity B에)하지만 (Activity C에 예를 Activity B하십시오.) 다른 활동에이를 전달하면 HashMap이 더 포함되어 있음을 의미한다이 의지 집단. 그 크기는 내가 Activity C에서 같은 일을하고있어

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_B

에서 Activity_A에서 0

,

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

체크 아웃 [이 하나] (http://blog.cluepusher.dk/2009/10/28/writing-parcelable-classes-for-android/) –

답변

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

+0

내 편집 된 대답 읽기 – Jin35

+0

@ Jin, 알았네. 나는 번들을 사용했다. 이게 문제 야. 이제 그 일. – bharath

관련 문제