2013-03-21 11 views
17
public class Category implements Parcelable { 

    private int mCategoryId; 
    private List<Video> mCategoryVideos; 

public int getCategoryId() { 
     return mCategoryId; 
    } 

    public void setCategoryId(int mCategoryId) { 
     this.mCategoryId = mCategoryId; 
    } 

public List<Video> getCategoryVideos() { 
     return mCategoryVideos; 
    } 

    public void setCategoryVideos(List<Video> videoList) { 
     mCategoryVideos = videoList; 
    } 

@Override 
    public void writeToParcel(Parcel parcel, int i) { 
     parcel.writeInt(mCategoryId); 
     parcel.writeTypedList(mCategoryVideos); 
    } 

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 
     public Category createFromParcel(Parcel parcel) { 
      final Category category = new Category(); 

      category.setCategoryId(parcel.readInt()); 
      category.setCategoryVideos(parcel.readTypedList()); */// **WHAT SHOULD I WRITE HERE*** 

      return category; 
     } 

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

} 

Im meinem Code Ich bin mit Modell, das von Parcel implementiert ... Könnte jemand em sagen, was schreit ich in dieser Zeile schreibe category.setCategoryVideos(parcel.readTypedList()) ich nicht nützlich Post finden.Wie schreibt List <> in Paket

EDIT: category.setCategoryVideos(parcel.readTypedList(mCategoryVideos,Video.CREATOR)); hier mCategoryVideos ich habe kann Fehler nicht beheben.

Antwort

23

Es gibt Liste Methoden für Parcel Klasse, können Sie einen Blick auf sie nehmen hier:

readList (List outVal, ClassLoader loader)

writeList (List val)

In Ihrem Fall wäre es wie folgt aussehen:

List<Object> myList = new ArrayList<>(); 

parcel.readList(myList,List.class.getClassLoader()); 
category.setCategoryVideos(myList); 
+1

Diese Antwort sollte als korrekt markiert werden, ist eine Sache tho, dass die Liste enthalten muss Parcel als auch Objekte. –

+3

Sehr kleine Korrektur: 'parcel.readList (MeineListe, ElementType.class.getClassLoader());' – WindRider

+1

NullPointerException –

2
public static final Parcelable.Creator<Category> CREATOR = new Parcelable.Creator<Category>() { 
      public Category createFromParcel(Parcel in) { 
       return new Category(in); 
      } 

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

private Category(Parcel in) { 
    String[] data = new String[1]; 
    in.readStringArray(data); 
    mCategoryId = Integer.parseInt(data[0]); 
} 

public void writeToParcel(Parcel dest, int flags) { 
    dest.writeStringArray(new String[]{ 
      mCategoryId 
    }); 
} 

Dann In Ihrer Aktivität.

public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putParcelableArrayList("mCategoryVideos", (List<? extends Parcelable>) mCategoryVideos); 
} 

public void onRestoreInstanceState(Bundle inState) { 
    super.onRestoreInstanceState(inState); 
    if (inState != null) { 
     mCategoryVideos = inState.getParcelableArrayList("mCategoryVideos"); 
     // Restore All Necessary Variables Here 
    } 
} 
2

From a good answer:

einfachen Schritten:

private List<MyParcelableClass> mList; 

protected MyClassWithInnerList(Parcel in) { 
    mList = in.readArrayList(MyParcelableClass.class.getClassLoader()); 
} 
@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeList(mList); 
} 
+1

Wenn Sie eine Liste von parcelable lesen, ist es besser, 'in.readList (myList, MyParcableClass.class.getClassLoader()) zu verwenden ; ' – Wojtek

Verwandte Themen