前提條件,Activity的之間的調用關係:A --> B,即Activity A啟動了Activity B 在A中啟動B的代碼:startActivityForResult(new Intent("ActivityB"), 100)
此方法與startActivity(Intent intent)方法最重要的區別就是:該方法是帶傳回值的,所謂傳回值其實是:你所啟動的那個Activity調用了finish()方法或者是按下了Back鍵被destory()掉之後,然後就會有一個傳回值。如果你要使用該傳回值的資訊,必須要在你之前的Activity A中Override父類的onActivityResult(int requestCode, int resultCode, Intent
data)方法,等到ActivityB銷毀後,會自動執行A中的onActivityResult(int requestCode, int resultCode, Intent data)方法,其中的requestCode就是你之前在A中調用B的那個requestCode,即100.而第二個參數resultCode則一般是我們在ActivityB銷毀之前,手動設定的一個標誌值,即在ActivityB中的設定代碼:setResult(200);;finish();即先設定值,然後finish掉B,這樣我們就把我們自己設定的resultCode:200也返回給了A。此時在A中的onActivityResult()方法中,就可以同時接收到這兩個值了。
為什麼我們要在B中手動設定resultCode呢?因為,假如果有時候我們需要在B中點擊了一個按鈕(或者是其他動作)之後,我們需要回到A,即我們會調用A的finish方法,但是如果使用者是直接按下了Back鍵將Afinish掉的,此時我們在A中就不知道B究竟是以何種方式finish掉的,所以我們設定了此結果標誌位。另外,有些人還需要在B finish掉的同時,給A帶回一些資料。例如,假如果現在B是登入介面,而我要實現的是,在B介面中登入成功後,將使用者名稱返回給A。如上,我們就必須要使用setResult()的另外一個重載(Overload)的方法了:setResult(int
resultCoe, Intent data),即我們也可以像兩個Activity之間傳遞資料一樣,使用Intent對象來傳遞。即我們可以將我們的資料放到intent中,最後再用setResult(200,data)同時將標誌位200和我們自己的使用者名稱資料傳遞給A。