我有以下课程:
public class Creature implements Serializable {
protected String name;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
// Rest of the methods and variables
}
Player Class扩展了Creature:
public class Player extends Creature implements Serializable {
// Class code
}
我使用Player
将Intents
的实例从一个活动传递到另一个活动:
// Activity A, passing the object
Intent charActivity= new Intent(this, CharacterActivity.class);
charActivity.putExtra("Player", player);
startActivity(goToCharacterActivity);
// Activity B, grabbing the object
Player player = (Player) getIntent().getSerializableExtra("Player");
现在,如果我在活动B中执行类似player.setName("Hello");
的操作,“原始”对象名称不会更新,则新名称仅在此当前活动中有效,因为我只有本地“副本”物体。如果我必须使用Serializable,我该如何解决这个问题?
答案 0 :(得分:0)
如果您希望他们在内存中引用相同的对象,则无法使用Serializable
或Parcelable
。 (将在内存中自动创建一个新对象)。
在这种情况下,我建议使用包含保存信息的静态字段的共享类。 E.g:
SharedInfo:
public class SharedInformation {
public static Creature theCreature;
}
活动A:像往常一样开始使用意图,但不要通过Person
或Creature
活动B:
SharedInformation.theCreature.setName("Hello");
答案 1 :(得分:0)
我在github中有一个玩家列表的例子。我所做的是使用onActivityResult和startActivityForResult方法,它们允许在两个活动之间返回值。您可以查看完整示例并从我的github repoitory下载代码。
答案 2 :(得分:0)
因为你的意图名称不一样。
Intent charActivity= new Intent(this, CharacterActivity.class);
您使用charActivity
作为名称。
更改
startActivity(goToCharacterActivity);
到
startActivity(charActivity);
答案 3 :(得分:0)
如果你想在Activity之间传递尝试Bundle,就像这样
活动1:
Intent i = new Intent(this,CharacterActivity.class);
Bundle playerBundle = new Bundle();
playerBundle.putSerializable("Player",player);
i.putExtras(playerBundle);
startActivity(i);
这是在活动2中检索包的方法:
Player player = (Player) getIntent.getSerializableExtra("Player");
并记住该示例中的关键点必须与此示例相同
作为关键