0

第二个活动上的“setResult”要么没有在第一个活动中将数据传递回 onActivityResult,要么甚至没有调用 onActivityResult ......我不知道是哪个


第一个活动:

//-- Handle item selection
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_settings:
            Intent i = new Intent(this, Options.class);
            Bundle counters = new Bundle();
            counters.putInt("plWin", plWin);
            counters.putInt("plLoss", plLoss);
            counters.putInt("plDraw", plDraw);
            i.putExtras(counters);
            startActivityForResult(i, RESULT_OK);
            return true;
        case R.id.menu_reset:




//-- Data being passed from "Options" --
protected void onActivityResult(int requestCode, int resultCode, Intent i){
    Bundle counts = i.getExtras();
    if (resultCode == RESULT_OK) {
        Toast.makeText(getApplicationContext(), "BOOM SHAKA LAKA!",Toast.LENGTH_SHORT).show();

        plWin = counts.getInt("Win", 100);
        plLoss = counts.getInt("Loss", 100);
        plDraw = counts.getInt("Draw", 100);
    }
}
}

第二个活动:

}
//-- Data being passed back to "Main" -- 
public void onBackPressed() {
    Bundle counters = new Bundle();
    Intent i = new Intent();
    counters.putInt("Win", wins);
    counters.putInt("Loss", losses);
    counters.putInt("Draw", draws);
    i.putExtras(counters);
    setResult(RESULT_OK, i);
    finish();
}
}
4

4 回答 4

1

将代码更改为:

Bundle counts = data.getExtras();
if (resultCode == RESULT_OK) {  
    plWin = counts.getInt("Win");
    plLoss = counts.getInt("Loss");
    plDraw = counts.getInt("Draw");
}

getIntent() 在您的情况下返回了启动第一个活动的意图。调用者活动,因此无需从第二个活动返回数据。

UPD:另外我想强调一下,onBackPressed()在第二个活动中实施非常奇怪。它正在调用super.onBackPressed(),默认情况下设置“取消”结果,因此不能保证您的 RESULT_OK 将是真正的返回值。

我建议更改代码,例如:

public void onBackPressed() {
    Bundle counters = new Bundle();
    Intent i = new Intent();
    counters.putInt("Win", wins);
    counters.putInt("Loss", losses);
    counters.putInt("Draw", draws);
    i.putExtras(counters);
    setResult(RESULT_OK, i);
    finish();
}

请让我们知道它是否有帮助。

于 2012-09-03T20:05:22.953 回答
0

尝试使用这个

plWin=data.getIntExtra("Win",0);
plLoss=data.getIntExtra("Loss",0);
plDraw=data.getIntExtra("Draw",0);

并检查值是否返回零,这意味着从活动传递额外或捆绑时存在一些问题。

如果有任何类似的情况可以通过代码处理,但我认为这些函数不会出现任何异常。

于 2012-09-03T20:28:05.550 回答
0

您的错误是在您正在编写结果代码的请求代码的位置(RESULT_OK)

startActivityForResult(i, RESULT_OK); //incorrect

我建议做一个像这样的静态变量

public static final int REQUEST_SECOND=100;

并通过它像

statrtActivityForResult(i,REQUEST_SECOND);

然后在第二个活动中为结果创建一个静态变量

public static final int MY_RESULT=101;

并调用第二个活动

setResult(MY_RESULT);

并像这样写 onActivityResult :

protected void onActivityResult(int requestCode, int resultCode, Intent i){

if(requestcod==REQUEST_SECOND){


    Bundle counts = i.getExtras();
    if (resultCode == MY_RESULT) {
        Toast.makeText(getApplicationContext(), "BOOM SHAKA LAKA!",Toast.LENGTH_SHORT).show();

        plWin = counts.getInt("Win", 100);
        plLoss = counts.getInt("Loss", 100);
        plDraw = counts.getInt("Draw", 100);
    }
}
}
于 2012-09-03T21:09:10.350 回答
0

我的“startActivityForResult”中有“RESULT_OK”而不是int。

将其从 OP 中显示的内容更改为:

startActivityForResult(i, 100);

修复。

感谢大家的贡献!

于 2012-09-03T21:17:43.097 回答