繁体   English   中英

我如何在活动2(Android)中更改活动1中传递的对象的值

[英]How can i change the value of a passed object from activity one at activity two (android)

我正在尝试在android studio上制作一个基本的应用程序。 简而言之,我有两个活动页面和三个班级。

1类MainActivity.java是其所属的活动1

2类MarketActivity.java其所属活动2

3类CharacterAction.java在此类中,我们具有字符功能

在活动1中,我们有3个按钮

活动1

按钮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 它说,如果您购买这些剑,则每次攻击都会使攻击力收益提高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

startActivityForResult()

方法1:

在MarketActivity更新对象中使用缓存,然后将更新保存在缓存中,接下来在第一个Activity中,您应该从缓存中更新对象,例如:

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))
                }
            }
        }
    }

Parcels.unwrap来自https://github.com/johncarl81/parceler

我通过更改public int saldiriBonus = 2解决了我的问题; //对公共静态int saldiriBonus = 2的攻击加值; 我所做的一切。 将方法更改为static

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM