2011-03-14 35 views
15

到目前爲止,我用成功的startActivity函數,現在我需要使用startActivityResult,我有一個問題。onActivityResult從不叫

使用此函數時,我期望啓動的活動會正確啓動,但它似乎不會調用onActivityResult函數。

這裏是我的代碼在FriendPicker活動,勞克在MoodPicker活動:

Intent intent = new Intent(FriendPicker.this, MoodPicker.class); 
startActivityForResult(intent, 2); 

這裏是我在MoodPicker活動代碼:

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

    Log.i("in OnActivityResult", "Activity Result");       

    switch (requestCode) 
    { 
     case 2:    
      Log.i("in OnActivityResult", "Activity Resut 2");     

      break; 
    } 
} 

,並沒有在我的日誌文件被寫入(當然,我檢查了我的日誌文件工作正常,並仔細檢查文本視圖輸出)。

有沒有我忘記在清單文件中聲明的東西?

在此先感謝。

回答

10

您是否在您的MoodPicker類中添加了setResult()調用?

+0

好了,現在我知道了。謝謝! – thomaus 2011-03-16 11:01:36

+11

請添加您的解決方案,以便閱讀本文的其他用戶可以找到有用的幫助。 – 2011-03-16 16:59:19

6

如果我正在閱讀此權限,則所有引用的代碼都必須位於「FriendPicker」中。在 「MoodPicker」 你需要這樣的代碼,設置的結果,本身結束:

this.setResult(SUCCESS_RETURN_CODE, i); 
this.finish(); 

讓我知道如果這能幫助...

+0

你的意思是我寫的所有代碼應該在FriendPicker活動中?因爲如果是這樣,我在startActivityForResult進程中根本找不到。 – thomaus 2011-03-14 17:48:07

+0

我嘗試把onActivityResult函數放在我的FriendPicker類中並且記錄下來。我不明白... – thomaus 2011-03-14 18:18:12

+3

onActivityResult()應放置在您調用startActivityForResult() – 2011-03-14 19:37:45

3

FriendPicker活動

Intent intent = new Intent(FriendPicker.this, MoodPicker.class); 
startActivityForResult(intent, 2); 


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

    Log.i("in OnActivityResult", "Activity Result");       

    switch (requestCode) 
    { 
     case 2:    
      if (resultCode == Activity.RESULT_OK) {  //optional 
      Log.i("in OnActivityResult", "Activity Resut 2");     
       } 
      break; 
    } 
} 

MoodPicker

Intent intent = new Intent(MoodPicker.this, FriendPicker.class); 
     setResult(Activity.RESULT_OK, intent); 
finish(); 

我有使用onActivityResult()相同的問題;因爲我沒有理解這將如何正確應用,在這裏你可以找到一個很好的解釋如何使用onActivityResult onActivityResult doesn't work?

5

有Android API的錯誤。在startActivityForResult(intent,requestCode); 只要requestCode = 0,此函數就可以工作。但是,如果將請求代碼更改爲 以外的其他值,ApiDemos將失敗(並且不會調用OnActivityResult)。 在這裏找到:

[編輯:鏈接刪除與垃圾郵件氾濫谷歌組]

+2

的Activity中。實際上,它可以與任何requestCode> = 0一起使用。但是,任何負面都不會。 – whitebrow 2013-04-08 15:43:03

+0

謝謝!我錯誤地發送了一個-1,並且指令起作用(我將它打開了Activity),但它沒有收到數據,所以你必須添加一個代碼> = 0 – 2015-06-03 07:06:56

28

我有同樣的問題,解決了這個問題: 只是刪除

android:launchMode="singleInstance" 
+0

可怕的猜測,你花費了多少時間。 .. – 2014-01-17 15:22:01

+0

這個問題讓我瘋狂,發現 – German 2014-01-21 21:10:28

+0

就這樣浪費了幾個小時。救命稻草就在這裏。 – Maurizio 2014-08-29 04:54:03

17

在我的情況,我沒有意識到我從清單中的android:noHistory屬性設置爲true的活動呼叫startActivityForResult。因此,onActivityResult從未被調用,因爲不再有活動實例。

+4

我被這個問題困住了好幾個小時。然後我看到你的答案,並意識到我犯了同樣的錯誤。感謝這個答案! – 2013-03-02 00:27:06

+0

是的。非常感謝。 – 2016-02-12 15:19:35

5
android:noHistory="true" 

android:launchMode="singleInstance" 

將停止onActivityResult從收到的結果。

+0

android:launchMode =「singleTask」 構成相同的問題。 – geecko 2015-05-05 18:59:55

0

,我已經做了,創建我的意圖後,我打電話的startActivity()代替startActivityForResult()

的錯誤有時簡單的人殺了你:)