0

我在实现 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);

我刚刚插入“null”的事实好吗?还是我必须在那些()之间插入其他东西?我正在关注这个例子,这没有在里面解释。它说应该像这样创建一个新对象:

Player newPlayer = new Player();

但是我不允许这样做,因为我做了一个构造函数。

4

1 回答 1

0

为您不Parcel用于构造对象的用例创建一个额外的构造函数,例如

public class Player implements Parcelable{
    /* ... */

    public Player(Parcel source){
        /* ... */
    }

    public Player(int score, String name){
        this.score = score;
        this.name = name; 
    }
}

Parcel然后,您可以从和使用 anint和 an构造对象String

final Player aPlayer = new Player(10000, "SomeRandomPlayerName");

此外,您在编写它们时以相反int的顺序阅读和String

于 2013-08-30T14:09:02.843 回答