2012-09-03 21 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); 

固定它。

感謝大家的貢獻!

相關問題