我在创建的活动中有一个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个。
答案 0 :(得分:2)
使用Intent
和onActivityResult
在活动之间共享数据。对这类东西使用静态值不是最好的选择。
答案 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));
}
}