2013-03-21 10 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 mój kod używam modelu, który implementuje z parcelable ... Czy ktoś może powiedzieć im, co krzyk piszę w tej linii category.setCategoryVideos(parcel.readTypedList()) nie mogłem znaleźć żadnego pomocny post.Jak napisać List <> na działce

EDYTOWANIE: category.setCategoryVideos(parcel.readTypedList(mCategoryVideos,Video.CREATOR)); tutaj mCategoryVideos Nie mogę rozwiązać błędu.

Odpowiedz

23

Istnieją metody list do Parcelable klasie, można spojrzeć na nich tutaj:

readList (List outVal, ClassLoader loader)

writeList (List val)

W twoim przypadku to będzie wyglądać:

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

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

Ta odpowiedź powinna być oznaczone jako poprawne, jedno tho jest to, że lista musi zawierać Parcelable obiektów, jak również. –

+3

Bardzo niewielka korekta: 'parcel.readList (myList, 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 
    }); 
} 

Następnie W ur Activity.

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:

prostych krokach:

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

Podczas czytania listy z działek lepiej jest użyć 'in.readList (myList, MyParcelableClass.class.getClassLoader()) ; ' – Wojtek

Powiązane problemy