2015-05-31 32 views
5

Quindi ho già ordinato gli elenchi, tuttavia sto cercando di parcellare il mio oggetto GameBoard, che in realtà ha un numero List<List<Tile>>. Tile implementabili in serie, ma non sono sicuro di come pacchettizzare lo List<List>. Ecco quello che ho provato:Elenco dei pacchi dell'elenco degli oggetti ordinabili

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]; 
     } 
    }; 

La classe di piastrelle implementa correttamente Parcelable, solo che non sono esattamente sicuro come leggere/scrivere la List<List>> quando spartizione questa classe. Qualche idea?

+3

Ecco un'idea dalle domande precedenti; http://stackoverflow.com/a/16529389/680519. – harism

+0

@harism concordato, che avrebbe funzionato. – EpicPandaForce

+0

@harism Grazie per il collegamento, è riuscito a ottenere una soluzione funzionante. –

risposta

1

Sulla base di commenti, ho esteso la classe ArrayList con la mia classe personalizzata e attuate Parcelable:

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]; 
     } 
    }; 
} 

e lievi modifiche alla mia altra classe:

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]; 
     } 
    }; 
}