如何在第3次中从两个不同的活动中总计两个int值?

时间:2013-04-07 12:46:32

标签: java android

我在创建的活动中有一个setText值设置为0的按钮。这是0因为我总共有两个int值,valueA和valueB在游戏开始时为0。在另一个活动结束后,我的valueA现在被设置为ActivityClassA中的一些公共静态int值,让我们说100.我现在需要当该活动结束时将该0值更改为新值A + valueB值,100 + 0 = 100.我想我应该在onResume方法中执行此操作,因此我将其放在那里,并且工作正常。

button.setText("" + ActivityClassA.valueA + ActivityClassB.valueB);

但是现在我有activity2开始,在活动结束后我在ActivityClassB中有公共静态int valueB,可以说是500.现在我需要将valueA + valueB的和值更新为100 + 500 = 600。但是现在,我的总和值是500.这就是我的问题。

我总是得到最后一个设定值。如果我先启动ActivityB然后启动A,我会得到100个。

2 个答案:

答案 0 :(得分:2)

使用IntentonActivityResult在活动之间共享数据。对这类东西使用静态值不是最好的选择。

答案 1 :(得分:1)

您应该使用startActivityForResult启动ActivityClassA和ActivityClassB,然后使用onActivityResult来显示结果。您的结构应如下所示。

在主要活动中:

private static int ACT_A = 1;
private static int ACT_B = 2;

private int resultA = 0;
private int resultB = 0;

public void onCreate(Bundle saved) {
    ...
    myTextView.setText("" + (resultA + resultB));
    ...
}

将ActivityClassA和ActivityClassB中的每一个作为:

启动
Intent i = new Intent(this, ActivityClassA.class);
startActivityForResult(i, ACT_A);

Intent i = new Intent(this, ActivityClassB.class);
startActivityForResult(i, ACT_B);

在ActivityClassA和ActivityClassB中,您将拥有如下代码:

int curScore;
...
Intent resp = new Intent();
resp.putExtra("score", curScore);
setResult(1, resp);
finish();

最后,在您的主要活动中,您将拥有方法onActivityResult

public void onActivityResult(int reqCode, int respCode, Intent i) {
    if(respCode == 1) {
        switch(reqCode) {
            case ACT_A: resultA = i.getIntExtra("score", resultA);
                        break;
            case ACT_B: resultB = i.getIntExtra("score", resultB);
                        break;
        }
        myTextView.setText("" + (resultA + resultB));
    }
}