Java 如何在活动2(android)中更改活动1中传递的对象的值
我正在尝试在android studio制作一个基本的应用程序。 简单地说,我有两个活动页面和三个班级 类1 MainActivity.java属于活动1 类别2 MarketActivity.java属于活动2 类3 CharacterAction.java在这个类中,我们有角色特性 在活动1中,我们有3个按钮 按钮1的用途是当你点击按钮时的攻击。1个角色将获得2点攻击力。我们的用途是当你在市场活动中购买物品,而角色被攻击时,它将获得2+2点攻击力 在CharacterAction.java类中,我们有以下内容:Java 如何在活动2(android)中更改活动1中传递的对象的值,java,android,Java,Android,我正在尝试在android studio制作一个基本的应用程序。 简单地说,我有两个活动页面和三个班级 类1 MainActivity.java属于活动1 类别2 MarketActivity.java属于活动2 类3 CharacterAction.java在这个类中,我们有角色特性 在活动1中,我们有3个按钮 按钮1的用途是当你点击按钮时的攻击。1个角色将获得2点攻击力。我们的用途是当你在市场活动中购买物品,而角色被攻击时,它将获得2+2点攻击力 在CharacterAction.java
private int kilo; // Weight
private int hareketSayisi; //Energy
public int saldiriGucu; //Attack power
public int saldiriBonus = 2; // it specifies how much attack power you will gain in one attack.
public int getKilo() { return kilo; }
public int getHareketSayisi() { return hareketSayisi; }
public int getSaldiriGucu() { return saldiriGucu; }
public String savas() {
if (hareketSayisi > 0) { // if energy > 0
hareketSayisi--; // energy - 1
saldiriGucu = saldiriGucu + saldiriBonus; // attackpower = attackpower + attackbonus it will add to attack power + 2
kilo--; //weight - 1
return "karakter savasti"; //return character attacked
} else {
return "Yeterli hareket yok"; // there is no energy left
}
}
和MainActivity.java:
characterAction.setKilo(10); // set the weight 10
characterAction.setSaldiriGucu(0); // set the attack power 0
characterAction.setHareketSayisi(10); // set the energy 10
我将这些对象从MaintActivity.java传递到MarketActivity.java:
characterAction = (CharacterAction) getIntent().getSerializableExtra("CharacterAction");
这里没有问题
让我们看看活动2(市场)
上面说如果你买了这把剑,你每次攻击的攻击力增益将增加2倍
我的问题是:
我在MarketActivity.java上得到了onClick()方法
@Override
public void onClick(View view) {
if (view.getId() == btnSatinAl1.getId()) {
tvSuccesful.setVisibility(View.VISIBLE);
if (characterAction.saldiriGucu > 10) { // if attackpower > 10
characterAction.saldiriBonus = (characterAction.saldiriBonus * 2); // attack power bonus * 2
tvSuccesful.setText("Satın alım başarılı"); // Succesful
btnSatinAl1.setVisibility(View.INVISIBLE);
} else {
tvSuccesful.setText("Yetersiz saldiri gücü"); // Not enough attack power.
}
}
}
在这些onClick()方法中,它需要在成功购买剑的同时增加+2攻击加值。但是它不会。在MarketActivity.java中,它说成功购买了剑,但当我打开活动1并试图攻击它时,每次攻击仍然会增加+2攻击力
我如何增加这些
感谢您的阅读。解决这个问题的方法很少,我将从*
startActivityForResult()
方式1:
在MarketActivity更新对象中使用cache并在cache中保存更新,接下来在第一个活动中,您应该从缓存更新对象,例如wtih:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
when (requestCode to resultCode) {
Navigator.XXX_REQUEST_CODE to Activity.RESULT_OK -> {
refreshDataFromCache()
}
}
}
方式2:
如果不想使用缓存,请在结果意图的数据中传递更新的对象,然后更新对象和下一个UI:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
when (requestCode to resultCode) {
Navigator.XXX_REQUEST_CODE to Activity.RESULT_OK -> {
data?.let {
val xxx = Parcels.unwrap<XXX>(data.getParcelableExtra(xActivity.DATA_TAG))
item = Parcels.unwrap<XXX>(data.getParcelableExtra(xActivity.DATA_TAG))
}
}
}
}
override-on-activityresult(请求代码:Int,结果代码:Int,数据:Intent?){
何时(从请求代码到结果代码){
Navigator.XXX\u请求\u代码到Activity.RESULT\u确定->{
数据?让我们{
val xxx=Parcels.unwrap(data.getParcelableExtra(xActivity.data_标记))
item=包裹.展开(data.getParcelableExtra(xActivity.data_标记))
}
}
}
}
包裹。展开是从
我解决了更改公共int-saldiriBonus=2;//攻击加成 对公共静态int saldiriBonus=2; 我所做的一切。
将方法更改为static..当您将对象传递给第二个活动时,它会在那里复制并编辑该实例。因此,当您返回到第一个活动时,您正在访问在第一个活动中创建的实例,该实例与第二个活动不同。如果要跨多个活动操作数据,请使用数据库或共享首选项。