2015-05-31 15 views
5

So habe ich Listen zuvor parzelliert, aber ich versuche, mein GameBoard Objekt, das tatsächlich eine List<List<Tile>> hat. Tile implementiert Parcelable, aber ich bin mir nicht sicher, wie genau die List<List> Paket. Hier ist, was ich versucht habe:Parcel Liste der Liste Parcelable Objekt

public class GameBoard implements Parcelable { 
    private String _id; 
    public String getId() { return _id; } 
    public void setId(String id) { _id = id; } 

    private List<List<Tile>> _tiles; 
    public List<List<Tile>> getTiles() { return _tiles; } 
    public void setTiles(List<List<Tile>> tiles) { _tiles = tiles; } 

    public GameBoard(Parcel in) { 
     _id = in.readString(); 
     in.readList(_tiles, ArrayList.class.getClassLoader()); 
    } 

    public GameBoard() { 

    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel parcel, int i) { 
     parcel.writeString(_id); 
     parcel.writeList(_tiles); 
    } 

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

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

Die Fliese Klasse richtig parcel implementiert, ich bin nur nicht ganz sicher, wie zu lesen/die List<List>> schreiben, wenn diese Klasse Parzellierung. Irgendwelche Ideen?

+3

Hier ist eine Idee aus früheren Fragen; http://stackoverflow.com/a/16529389/680519. – harism

+0

@harism stimmte zu, das würde funktionieren. – EpicPandaForce

+0

@harism Danke für den Link, gelungen, eine funktionierende Lösung zu bekommen. –

Antwort

1

Basierend auf Kommentare, ich erweiterte die ArrayList Klasse mit meiner benutzerdefinierten Klasse und implementiert parcel:

public class TileList extends ArrayList<Tile> implements Parcelable { 

    public TileList(){ 
     super(); 
    } 

    protected TileList(Parcel in) { 
     in.readTypedList(this, Tile.CREATOR); 
    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

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

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

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

und leichte Änderungen an meine anderen Klasse:

public class GameBoard implements Parcelable { 
    private String _id; 
    public String getId() { return _id; } 
    public void setId(String id) { _id = id; } 

    private List<TileList> _tiles; 
    public List<TileList> getTiles() { return _tiles; } 
    public void setTiles(List<TileList> tiles) { _tiles = tiles; } 

    public GameBoard(Parcel in) { 
     _id = in.readString(); 
     _tiles = new ArrayList<>(); 
     in.readTypedList(_tiles, TileList.CREATOR); 
    } 

    public GameBoard() { 

    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel parcel, int i) { 
     parcel.writeString(_id); 
     parcel.writeTypedList(_tiles); 
    } 

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

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