2013-03-21 5 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]; 
     } 
    }; 

} 

イムは、私がparcelableから実装モデルを使用しています私のコード...誰もが私がどんな役に立つ記事を見つけることができませんでしたcategory.setCategoryVideos(parcel.readTypedList()) この行に書かれたものは叫びのemを言うことができます。小包に一覧<>を書くためにどのように

編集:category.setCategoryVideos(parcel.readTypedList(mCategoryVideos,Video.CREATOR));ここにmCategoryVideos私はエラーを解決できません。

答えて

23

Parcelableクラスのリストの方法があり、あなたはここでそれらを見てみることができます:

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

parcel.readList(myList,List.class.getClassLoader()); 
category.setCategoryVideos(myList); 
:あなたのケースでは

readList (List outVal, ClassLoader loader)

writeList (List val)

それは次のようになります。

+1

、一つのカントーは、リストが同様にParcelableオブジェクトを含んでいなければならないということです。 –

+3

非常に小さな修正です: '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 
    }); 
} 

次に、活動中。

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:

簡単な手順:この答えが正しいとしてマークされなければならない

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

リストをパーセルブルから読み込むときは、 'in.readList(myList、MyParcelableClass.class.getClassLoader())を使う方が良いです。 ; ' – Wojtek

関連する問題