我在实现Parcelable时遇到了一些麻烦。我是这样做的:
public class Player implements Parcelable{
String name;
int score;
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(score);
}
public Player(Parcel source){
score = source.readInt();
name = source.readString();
}
}
public class MyCreator implements Parcelable.Creator<Player> {
@Override
public Player createFromParcel(Parcel source) {
return new Player(source);
}
@Override
public Player[] newArray(int size) {
return new Player[size];
}
}
这是实现Parcelable的整个代码。现在我正在尝试创建一个新的类对象:
Player newPlayer = new Player(null);
newPlayer.name = text;
newPlayer.score = 0;
playersParceledData.add(newPlayer);
zacniIgro.putParcelableArrayListExtra("parceledData", playersParceledData);
困扰我的是这条线:
Player newPlayer = new Player(null);
我刚刚说“空”的事实还好吗?或者我必须在那些()之间插入其他东西?我关注this example,但这里没有解释。它说应该像这样创建一个新对象:
Player newPlayer = new Player();
但是因为我做了一个构造函数,所以我不允许这样做。
答案 0 :(得分:0)
为您未使用Parcel
构建对象的用例创建其他构造函数,例如
public class Player implements Parcelable{
/* ... */
public Player(Parcel source){
/* ... */
}
public Player(int score, String name){
this.score = score;
this.name = name;
}
}
然后,您可以构建来自Parcel
并使用int
和String
的对象:
final Player aPlayer = new Player(10000, "SomeRandomPlayerName");
另外,您在编写时会按相反的顺序阅读int
和String
。