在意图之间传递类ArrayList

时间:2013-08-29 21:01:40

标签: java android eclipse class arraylist

我创建了一个名为“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()但是它也不起作用,因为它检索了一个包。或者这是正确的方式?但是我该怎么办呢?

2 个答案:

答案 0 :(得分:1)

&#34;标签&#34; newPlayer只是局部变量的名称,每次运行方法时总是不同的,所以这里没问题。

当您在此处putExtra()致电时,players被解释为Serializable,因此相应的来电为getSerializableExtra("players")。然后必须将结果投放到ArrayList<Player>

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

答案 1 :(得分: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");