Android: Activity間的數據傳遞

示例:

(來源於 Android 編程權威指南第3版)

背景:兩個活動,一個是 Quiz 活動,另一個是 Cheat 活動。

題目答案從 Quiz 活動傳遞給 Cheat 活動,再把用戶是否作弊的信息傳遞給 Quiz 活動。

1.首先我們位於 Quiz 活動,想點擊作弊按鈕,啓動 Cheat 活動。但是在此之前,先創建一個 Intent,Intent 用於活動的交互(四大組件都可以用它來交流的)。Intent 用來告訴 ActivityManager 該啓動哪個活動,構造方法爲:

Intent Intent(Context packageContext, Class<?> cls)

傳入該方法的 Class 類型參數告訴 ActivityManager 應該啓動哪個活動;Context 參數告訴 ActivityManager 在哪裏可以找到它。簡單一點說前者是父活動,後者是子活動。

2.我們需要在 Intent 上放參數,調用

Intent.putExtra(String name, boolean value)

第一個參數是一個字符串,第二個參數是一個布爾型(這裏可以換成其他類型)。我們可以看做 Intent 是個 Map,裏面存放着鍵-值對這樣的數據,之後調用

void startActivityForResult(Intent intent, int requestCode)

把 Intent 發出去,第一個參數是 Intent 類,第二個參數是 int 類型的 requestcode,Intent 就用之前創建的,而 requestcode 是用來標識是從哪個活動回來的(取值大於等於零),它會被丟到子活動中,之後又從子活動中返回。

3.現在到了子活動,我們需要把用戶是否作弊的信息發回去。有兩種方法:

public final void setResult(int resultCode)

public final void setResult(int resultCode, Intent data)

resultCode有以下常量:

Activity.RESULT_OK

Activity.RESULT_CANCELED (如需自己定義結果代碼,還可使用另一個常量:RESULT_FIRST_USER

如果用戶按的是導航欄上的返回鍵則會返回 Activity.RESULT_CANCELED

我和書上都用了第二種方法,仔細想想第一種就行。照葫蘆畫瓢,把信息都用 putExtra 丟到 Intent 上。

4.回到父活動,父活動調用

protected void onActivityResult(int requestCode, int resultCode, Intent data)

再根據自己用 resultCode 還是 Intent 傳遞的信息做判斷,進行下一步操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章