包裹清单包裹清单 [英] Parcel List of List of Parcelable object
问题描述
所以我之前已经打包了列表,但是我想打包我的 GameBoard
对象,该对象实际上具有 List< List< Tile>>
.Tile
实现了 Parcelable,但我不确定如何对 List
进行打包.这是我尝试过的:
So I've parceled lists before, however I'm trying to parcel my GameBoard
object, which actually has a List<List<Tile>>
. Tile
implements parcelable, but I'm not sure exactly how to parcel the List<List>
. Here's what I've tried:
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];
}
};
tile类正确实现了可包裹性,我不确定在包裹该类时如何读取/写入 List< List>>
.有什么想法吗?
The tile class correctly implements parcelable, I'm just not exactly sure how to read / write the List<List>>
when parceling this class. Any ideas?
推荐答案
基于注释,我使用自定义类扩展了 ArrayList
类并实现了可打包:
Based on comments, I extended the ArrayList
class with my custom class and implemented 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];
}
};
}
对我的其他班级做了些微改动:
and slight changes to my other class:
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];
}
};
}
这篇关于包裹清单包裹清单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!