首页 > 解决方案 > 如何在活动二(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 攻击力每次攻击。

我怎样才能增加这些?

谢谢阅读。

标签: javaandroid

解决方案


有几种可能的方法可以解决这个问题,我会用 * 开始 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


推荐阅读