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