2012-09-03 29 views
0

第二个活动的“setResult”要么不是将数据传回给第一个onActivityResult,要么是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(); 
} 
} 

回答

0

尝试使用这个

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

,并检查值,如果他们正在返回零则意味着没有经过合格的额外或包从活动有一定的问题。

如果有任何条件那样的代码处理,但我认为这些功能不会通过任何例外。

+0

没有例外...我感觉到它根本不叫他们。我这样做了,但不是'0'我用'100',并没有得到任何一个 – Psest328

+0

备份我以前的声明。我在onActivityResult if方法下插入了一个toast,并且它没有根据AlexN的要求激活 – Psest328

+0

,我改变了操作...粘贴了两个活动的全部内容 – Psest328

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(); 
} 

请让我们知道这将有助于与否。

+0

我一直盯着这近2天,没有看到。非常感谢。啊,坚果。现在“Bundle counts = data.getExtras();”正在抛出异常 – Psest328

+0

行,修正了零点异常。但我回到原来的问题,它不覆盖原来的变量。编辑我原来的问题以纳入更改 – Psest328

+0

请参阅最新的答案。如果它不起作用 - 我会要求你粘贴你的Fisrt Activity的onCreate()或其他方法,其中plWin变量被更改 – AlexN

0

你的错误是在请求码你正在编写发送resultCode(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); 
    } 
} 
} 
+0

@WizardKnight接受答案,如果你的问题解决了 – pyus13

0

我 'startActivityForResult' 有 “RESULT_OK” 的它,而不是一个int。

从什么显示在OP对改变它:

startActivityForResult(i, 100); 

固定它。

感谢大家的贡献!