2011-09-30 29 views
2

我有一個活動,我只想存在一次,無論打開多少次。以前我使用launchMode singleTask,一切都很好。但是,現在我需要使用onActivityResult,由於某些原因,它與launchMode singleTask不兼容。防止活動的多個實例,但仍然使用onActivityResult

你知道一種方法來複制它們中的任何一個嗎?

+0

「但是,現在我需要使用onActivityResult,它出於某種原因與onActivityResult不兼容」 - 該句子無法正確解析。另外,爲什麼你認爲你需要'singleTask',爲什麼你認爲你需要'startActivityForResult()'''onActivityResult()'?如果你花時間解釋你想要達到的目標,那麼人們可以更容易地提出其他解決方案。 – CommonsWare

+0

好的。我需要startActivityForResult()和onActivityResult(),因爲我啓動了一個細節視圖,並需要從那裏傳播到我原來的活動。這個問題的基本前提是,我需要onActivityResult和singleTask完成的任務。我已經實現了一種解決方法(hack),其中我使用singleTask,但是使用Global Variables處理onResume中的活動。 – Leo

+1

你爲什麼認爲你需要'singleTask'? – CommonsWare

回答

3

我的主要活動也是一個單一的任務,但我肯定從我的主要活動開始活動結果並取回結果。

這裏是我的艙單申報:

<activity 
    android:name=".activities.Main" 
    android:theme="@android:style/Theme.Light" 
    android:screenOrientation="portrait" 
    android:launchMode="singleTask" 
    > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

這裏是我的onActivityResult:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent){ 
    super.onActivityResult(requestCode, resultCode, intent); 
    // blah blah checking if if the requestCode and resultCode are good // 
} 

我敢肯定,你設置的結果在其他活動......

所以,只需與我的代碼交叉檢查一下,看看我們是否能找到問題。

  • 確保onActivityResult在您覆蓋它時受到「保護」。

希望這有助於

-serkan

+0

你說「確保onActivityResult是」保護「,當你壓倒它」你能澄清?你的意思是說它不應該被宣佈爲私人? – Sojurn

1

您可以使用FLAG_ACTIVITY_REORDER_TO_FRONT,這將帶來啓動的活動給它的任務的堆棧的前面,而不是創建一個新的實例。

請注意,結果將傳遞到名爲startActivityForResult的第一個活動。這answer提供了一個很好的例子,說明這是如何工作的。