2011-06-07 65 views
2

我有以下情形(注意,活動一個launchMode="singleTop"):活動結果不被記住?

  1. 活動一個上的活動電話startActivityForResult();
  2. 活性B關於Ç調用startActivity(),之後setResult(RESULT_OK)finish();在這一點上,onActivityResult()A不是調用。
  3. 活動Ç調用startActivity()使用FLAG_ACTIVITY_CLEAR_TOPfinish();

這是我的問題發生的地方。在這一點上,AonActivityResult()被稱爲requestCode,但不是RESULT_OK作爲resultCode。我期待它收到RESULT_OK,因爲我已將它設置在B(已啓動結果)。

爲什麼我會得到RESULT_OK以外的東西?

回答

1

閱讀本文檔:

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

如果設置,並且活動正在啓動 已經在當前 任務運行,然後,而不是推出該活動的一個新 例如,所有的 其他活動在此之上將會是 已關閉,並且此意圖將 交付給(現在在上面)舊 活動作爲新的意圖。

傳遞清除頂部標誌將完成堆棧中的所有活動。因此,您在onActivityResult中得到的內容可能是「通知」,表示您希望結果取消的活動。 (又名RESULT_CANCELED = 0×00)

UPDATE

當我使用startActivityForResult,設置後的結果,我總是完成我的活動,讓調用者來行動。

您正在做的事情不太常見:您設置結果,完成您的活動你也開始另一個。我不知道在這種情況下的預期行爲。你不能改變活動之間的互動嗎?

您可以嘗試先撥打finish(),然後開始新的活動(在活動B和C中執行此操作)。無論如何,我也不知道當你這樣做會發生什麼。我建議你採用第一種方法(改變交互方式,以便不返回結果並同時創建新活動)。

也許你可以連鎖兩個startActivityForResult或你的活動乙可以發送一個新的意圖,而不是返回結果?

+0

所有其他活動(在我的情況下,** B **)已經完成並且'setResult(RESULT_OK);'。它不應該覆蓋我的結果。 – Felix 2011-06-07 11:58:44

+0

我最終讓我的** C **活動直接啓動** A **並放棄了整個基於結果的邏輯。我想過關於'startActivityForResult()'調用的鏈接,但是在我的情況下這是不可能的,因爲** C **是一個更通用的活動,在其他情況下也可以重用。 – Felix 2011-06-07 12:41:51

+0

最後一句話:如果你在通過''startActivityForResult''沒有啓動的時候調用''setResult''和''finish'',沒有任何事情發生(沒有''onActivityResult''被調用),所以我猜你可以重用活動C沒有任何問題。 – 2011-06-07 13:42:04