java - 如何在活动二(android)中更改活动一中传递的对象的值
问题描述
我正在尝试在 android studio 制作一个基本的应用程序。简单地说,我有两个活动页面和三个班级。
Class 1 MainActivity.java 所属活动 1
Class 2 MarketActivity.java 它属于活动 2
Class 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 上它说成功购买但是当我打开 Activity 1 并尝试攻击时,它仍然给予 +2 攻击力每次攻击。
我怎样才能增加这些?
谢谢阅读。
解决方案
有几种可能的方法可以解决这个问题,我会用 * 开始 MarketActivity
startActivityForResult()
方式一:
使用缓存,在 MarketActivity 更新对象并将更新保存在缓存中,接下来在第一个 Activity 中,您应该从缓存中更新对象,例如:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
when (requestCode to resultCode) {
Navigator.XXX_REQUEST_CODE to Activity.RESULT_OK -> {
refreshDataFromCache()
}
}
}
方式二:
如果您不想使用缓存,请在结果意图的数据中传递更新的对象,然后更新对象和下一个 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))
}
}
}
}
Parcels.unwrap 来自https://github.com/johncarl81/parceler
推荐阅读
- c# - 硬币计数显示显示不同数量 - Unity 2D游戏
- google-sheets - 需要一个复数乘以一个值的公式(不是每年)
- assembly - 如何检查输入是否为int?
- agens-graph - 如何在 AgensGraph 上更快地获取标签的最大位置 ID?
- python - Python Timer 是否可以通过检查它是否存在来取消?
- reactjs - 我们如何使用 TSX 为反应元素指定类型
- c++ - 我可以有一个不同于 linux 环境中的本地 C++ 编译器吗?
- java - 正则表达式检索任何字母数字 otp 代码
- git - 如何检测 git (github) 中的提交更改
- css - 如何在移动媒体查询中移动我的登录表单