【问题标题】:How to total two int values from two different activities in 3rd?如何在 3rd 中合计来自两个不同活动的两个 int 值?
【发布时间】:2013-04-07 12:46:32
【问题描述】:

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

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

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

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

【问题讨论】:

  • 看看Activity 类中的startActivityForResultonActivityResult 方法。

标签: java android


【解决方案1】:

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

【讨论】:

  • 我尝试有意地传递 int 值,但没有奏效。在我的情况下如何使用 onActivityResult?
【解决方案2】:

您应该使用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));
    }
}

【讨论】:

  • 谢谢。我在 case ACT_A 和 ACT_B 遇到错误...case 表达式必须是常量表达式。所以我把它们改成了final。可以吗?
  • 另外,您说:“将 ActivityClassA 和 ActivityClassB 分别启动为:”....好吧,我也遇到了错误。它说我应该添加参数来匹配参数'Intent(Context, class>)。我应该使用“this”吗?
  • @marjanbaz 对不起,我的错误。我错过了调用new Intent 的第一个参数——它应该是new Intent(this, ActivityClassA.class)。我更新了我的答案。
  • 还有,可以用public static int curScore;而不仅仅是int curScore?我需要其他班级的才能看到它。
  • 使用静态成员虽然可能有效,但不是一个好主意。您应该从不使用静态成员在类之间交换信息,并始终使用正确的接口。
猜你喜欢
  • 2020-09-06
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多