2010-07-28 86 views
88

我從我的工人活動啓動Activity(的PreferenceActivity後裔)如下:onActivityResult()稱爲過早

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == 1458) 
     loadInfo(); 
} 

void showSettingsDialog() 
{ 
    startActivityForResult(new Intent().setClass(this, MyConfigure.class), 1458); 
} 

MyConfigure類沒有任何setResult()電話。實際上,MyConfigure類沒有任何代碼,除了OnCreate(),它使用addPreferencesFromResource加載首選項。

現在onActivityResult被稱爲requestCode1458過早,MyConfigure之後正在運行。測試1.6和2.1仿真器以及2.1設備。是否有電話setResult()埋在PreferenceActivity的某處?或者如何解釋這個過早的呼叫?

+1

一個活動上setResults()並沒有結束,它結束完成()。你可以顯示MyConfigure活動的onCreate方法嗎? – 2010-07-28 16:24:29

+0

對,它沒有。但是,有些事情會提前調用setResult(),我想知道它是什麼。的onCreate的代碼很簡單: 公共類MyConfigure擴展PreferenceActivity { \t @覆蓋 \t保護無效的onCreate(捆綁savedInstanceState){ 超。的onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } } – 2010-07-28 17:02:15

+0

您認爲如何知道setResult被調用? – RoflcoptrException 2010-07-28 17:05:21

回答

246

這是通過改變起跑模式固定爲singleTop:(?)

<activity 
     android:name=".MainActivity" 
     android:launchMode="singleTop"> 

有一個bug /功能在Android中,立即報告結果(尚未成立至今)Activity,聲明singleTask(儘管活動繼續運行)。如果我們將父活動的launchModesingleTask更改爲singleTop,則所有內容均按預期工作 - 僅在活動完成後纔會報告結果。雖然這種行爲有一定的解釋(只有一個singleTask活動可以存在,並且可能發生多個服務員),但這對我來說仍然不合邏輯。

+0

哦,是的,謝謝,真棒的答案! – 2010-12-23 15:57:24

+2

這似乎是一個錯誤! ^^很怪異的行爲! – 2011-10-10 22:26:28

+7

如果活動具有singleTask啓動模式,則不需要使用onActivityResult從子活動接收結果。子活動只需調用finish(),然後用數據意圖啓動主活動。在主要活動中,您必須重寫onNewIntent方法並處理收到的意圖。 – Nik 2012-06-07 11:48:12

-1

同樣在Mayra的評論中,setResult()與您的問題無關。由於某種原因,MyConfigure類完成自己,當它發生時PreferenceActivity只是假設可能有一個結果MyConfigure,因爲這就是你寫代碼的方式。當你逼退任何活動,這就是開始startActivityForResult()

這也恰好...

所以,我認爲這是更好地專注於爲什麼你MyConfigure類被強制結束。

+0

MyConfigure類沒有完成,你的猜測是錯誤的,對不起。如果是這樣,那就沒有問題 – 2010-07-29 06:40:26

5

我剛剛從我的Activity中刪除了所有自定義的「android:launchMode」,並且所有工作都像魅力一樣。當你不知道Android究竟是什麼時,改變這一點並不是一個好主意...... Android在這方面有點棘手。

+0

這對我來說也適用。謝謝! – thiagolsilva 2015-07-23 20:44:22

15

我在撥打fragment.startActivityForResult(intent, 0);之前刪除intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);後解決了我的問題。

+0

謝謝!這解決了我的問題。有什麼解釋嗎? – 2017-04-01 15:53:29

+0

謝謝!這解決了我的問題。 – 2017-09-05 15:16:02

1

當意圖設置了Intent.FLAG_RECEIVER_FOREGROUND標誌時,發生了這種情況。

(是的,這面旗幟是不活動有關,但我有它在我的所有意圖的獵槍解決a different problem的一部分。)