0

在创建的活动中,我有一个 setText 值设置为 0 的按钮。它是 0,因为我总共有两个 int 值,valueA 和 valueB,它们在游戏开始时为 0。在另一个活动结束后,我的 valueA 现在设置为 ActivityClassA 中的某个公共静态 int 值,比如说 100。我现在需要在该活动结束时将该 0 值更改为新的 valueA+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 个。

4

2 回答 2

2

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

于 2013-04-07T12:49:34.373 回答
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));
    }
}
于 2013-04-07T13:01:06.033 回答