請求代碼不會自動傳遞到啓動的活動,因爲它d oesn't(也不應該)需要知道這個值。它只需要知道該做什麼,而不需要從哪裏開始。
開始的活動是真的調用一個方法的另一種形式。當你調用一個方法時,你會同步地收到結果(就在你撥打電話的地方)。在這種情況下,您只傳遞該方法需要完成其工作的信息。你不是在告訴它你從哪裏來的。
啓動一個活動是調用一個方法,在這種情況下會出現在結果的特殊方法的異步模擬onActivityResult()。在這種方法中,你需要知道你剛剛收到的結果該怎麼做,並且你有這個請求代碼。
爲了使它更清楚一點,爲什麼它不是一個好主意傳遞請求代碼作爲參數,考慮該圖是一個產品,你可以買到的例子活動。在此活動中,有兩個按鈕分別標記爲「購買」和「登錄」(因爲您目前尚未登錄)。按「登錄」將啓動名爲「登錄」的活動,該活動將嘗試使用提供的信息登錄用戶。按「購買」將首先啓動完全相同的「登錄」活動,如果登錄成功,則開始購買活動。
現在,「登錄」按鈕使用請求碼1,啓動登錄活動,但「購買」按鈕不能使用相同的請求的代碼,因爲它會做不同的事情,如果登錄成功。所以,「購買」按鈕使用請求代碼2.
在不同的地方它是從叫您可能會收到兩個不同的請求代碼「登錄」的活動,但你需要做的非常相同的程序。
所以,如果你在請求代碼作爲參數傳遞,你將最終需要做同樣的東西了幾個不同的請求代碼,如代碼:
if (requestCode == LOGIN || requestCode == BUY) {
// ...
} else ...
你也最終將請求代碼常量存儲在一箇中心位置,例如一個名爲RequestCodes的類。
簡而言之,請求代碼只能用於決定如何處理收到的結果。通過這種方式,您將獲得更多模塊化,更易於維護和更容易擴展的代碼。
難道真的沒有辦法了孩子的活動,以獲取其請求碼? – 2011-06-23 00:33:42
直到現在我對最好的知識,我認爲沒有其他辦法。 – 2011-06-23 04:30:57
想知道同樣的事情 - 這是Android API中那些沒有任何邏輯意義的東西之一。 – 2011-07-29 21:34:50