0

我创建了一个名为“Player”的类。

public class Player{
    public String name;
    public int score;
}

每次我单击一个按钮时,都会生成一个新的 TextView 以及一个新的 Player 类。这是代码:

private TextView createNewTextView (String text){
    final LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    final TextView newTextView = new TextView(this);

    newTextView.setLayoutParams(lparams);
    newTextView.setText(text);

    Player newPlayer = new Player();
    newPlayer.name = text;
    newPlayer.score = 0;
    players.add(newPlayer);
    zacniIgro.putExtra("players", (ArrayList<Player>) players);
    return newTextView;
}

这是正确的方法吗?我认为有一个小缺陷,因为每次单击按钮时,都会在“newPlayer”标签下添加一个新播放器。我该如何解决?

我的主要问题是这个;如何在第二个活动中“解包”ArrayList,以便我可以使用 ArrayList 的每个元素进行操作?我试过 getStringArrayListExtra() 但它不起作用。我也试过 getExtras() 但这也不起作用,因为它检索一个包。或者这是正确的方法?但是我该怎么处理捆绑包呢?

4

2 回答 2

1

“标签”newPlayer只是一个局部变量的名称,每次运行该方法时总是不同的东西,所以这里没有问题。

当你putExtra()在这里调用时players被解释为Serializable如此对应的调用是getSerializableExtra("players")。然后必须将结果转换为ArrayList<Player>.

要完成这项工作,您必须另外使Player类可序列化。在这里你可以只实现 interface Serializable

于 2013-08-29T21:18:34.133 回答
0

更好的方法是使用Parcelable

简单的例子:

public class Device implements Parcelable {

private String name;
private String hash;

/**
 * Default private constructor.
 */
public Device() {

}

public Device(final Parcel parcel) {
    super();

    readFromParcel(parcel);
}

public static final Parcelable.Creator<Device> CREATOR = new Parcelable.Creator<Device>() {

    @Override
    public Device createFromParcel(final Parcel source) {
        return new Device(source);
    }

    @Override
    public Device[] newArray(final int size) {
        return new Device[size];
    }
};

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

@Override
public void writeToParcel(final Parcel parcel, final int flags) {
    parcel.writeString(name);
    parcel.writeString(hash);
}

private void readFromParcel(final Parcel parcel) {
    this.name = parcel.readString();
    this.hash = parcel.readString();
}

把你的对象放在这样的意图中:

intent.putParcelableArrayListExtra("Key", YourObject);

要进入另一个屏幕:

Intent intent = getIntent();
intent.getParcelableArrayExtra("key");
于 2013-08-29T22:09:24.280 回答