2013-08-29 141 views
3

我搜遍了所有關於它的類似帖子,但無法找到解決方案!片段startActivityForResult總是返回resultCode 0和intent null回調onActivityResult

我的情況是我有一個活動A持有一個片段,並從該片段我想開始一個新的活動B應該返回一些值的片段。

在片段

startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE); 

在活動B,返回數據

Intent returnIntent = new Intent(); 
returnIntent.putExtra(SerializationConstants.isSearchSaved, mAbItemsShown.ordinal()); 
setResult (ConstantsUtils.SUCCESS_RETURN_CODE, returnIntent); 
finish(); 

在片段

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 

switch (requestCode) { 

    case ConstantsUtils.TOMAP_REQUEST_CODE: 

      if (resultCode == ConstantsUtils.SUCCESS_RETURN_CODE) { 
       //do some stuff 
      } 
    } 
} 

從片段onActivityResult調用成功,與right requestCode,但resultCode始終爲0,意圖始終爲空

我有下活動沒有其他onActivityResult執行甲

事實上,我也開始嘗試從所述片段的活性與 getActivity()startActivityForResult(mapIntent,ConstantsUtils.TOMAP_REQUEST_CODE)。 和實施onActivityResult上的活動A,但它發生的一樣吧requestCode但錯resultCode爲和意圖

我使用的是福爾摩斯行動吧,所以我的片段是SherlockListFragment所以我使用了支持庫(R18)

你能幫我嗎?謝謝

+1

我不知道你的'super.onActivityResult(requestCode,resultCode,intent)'是什麼''。在我看來,沒有必要。另外,您的request_code需要大於等於0,因爲它提及[here] [doc] [doc]:http://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content。意圖,詮釋) –

+0

超級不是必要的,我只是想看看問題是否因爲它,但如果我不把它放在同一個結果。常量SUCCESS_RETURN_CODE的值爲1,但是與Activity.RESULT_OK相同。 – nirvik

+0

看起來像在ActivityB中的其他位置調用finish()。調用'finish()'而不設置結果代碼和結果數據會導致你正在描述的行爲。無論是那個或ActivityB崩潰,這將做同樣的事情。 –

回答

11

結果代碼0是RESULT_CANCELLED

The resultCode will be RESULT_CANCELED if the activity explicitly returned that, didn't return any result, or crashed during its operation. 

也越來越這段代碼的常見的原因是在一個新的任務發起的活動(檢查您的標誌,這導致新任務的開始意圖和清單)。

此外,如果您有父級活動,則應該設置它的結果代碼而不是設置其子級的結果代碼(嘗試到getParent,如果它不爲空,則設置它的結果代碼)。

+0

我查了一下,並且在清單中或創建意圖時沒有任何特殊標記。並且ActivityB中的getParent的值(執行setResult的那個)爲null – nirvik

+3

太棒了,謝謝。對我來說問題是我的manifest中有launchMode =「singleTask」。 – elimirks

+1

@elimirks你能解釋我如何解決你的問題嗎?我需要'launchMode =「singleTask」',但我仍然想開始一個新的活動。 – mariosangiorgio

2

我花了一些時間找出原因。我的錯誤是將super.onBackPressed()放在onBackPress()方法中。在該方法中我稱爲finish()。但我認爲super.onBackPressed()會自動調用finish(),所以您總是會得到resultCode 0。 因此,只需刪除onBackPressed()方法中的super.onBackPressed()行即可。

+0

我有同樣的問題,這個評論讓我安心!謝謝 :) – yoonhok

相關問題