《Android》『Intent』- 透過 Intent 切換 Activity 並利用 Bundle 傳送參數

《Android Developers 參考文獻》

➥Intent

 

《簡單介紹》

Intent 照字面翻譯,有『意圖』的意思,我們可以把它想像為這個應用程式的意圖,而要完成這個意圖,我們通常需要為其附帶一個『動作』,也就是 Action,像是撥打電話時需要代入 ACTION_DIAL、傳送電子郵件需要代入 ACTION_SENDTO…等,詳細的介紹我會另外寫一篇整理,這邊我們先來看看如何使用 Intent 來切換 Activity。

在前面 Activity 的生命週期文章中,我們已經知道 Activity 在是一個應用程式中,程序執行時的”行為”,一個 Application 可以由多個 Activity 的交互作用所構成。那麼當我們要由一個 Activity 切換至另一個 Activity 的時候,在程式碼中該如何實做呢?這個時候 Intent 就派上用場了。

 

《用法介紹》

➥intent Action 用法總整理

➥透過 intent 由 A activity 跳轉至 B activity

➥透過 intent.putExtra() 夾帶基本型別參數

➥透過 Bundle 與 intent.putExtras() 夾帶基本型別參數

➥透過 putSerializable() 夾帶物件

➥透過 startActivityForResult() 回傳參數給原 activity

透過 intent 由 A activity 跳轉至 B activity

透過 Intent 切換 Activity 的方法其實很簡單,以下我們直接透過程式碼片段做說明 –

寫法一

寫法二

透過如上方式,我們可以輕易地將應用程式從 A activity 切換至 B activity,那麼如果我們想在切換的同時,把我們所需的參數由 A activity 傳至 B activity 呢?

有兩種方式,程式碼片段如下 –

 

跳轉 Activity 時傳遞基本型別參數

寫法一 : 透過 putExtra 實作

寫法二 : 透過 Bundle 實作

我們可以透過 intent 本身的 putExtra() 函式直接設定所要代入的參數,此參數可以是所有基本型別;亦可以透過另外宣告一個 Bundle 物件,將所要代入的參數設定好,再透過 intent 本身的 putExtras() 函式把設定好的 Bundle 一次塞給 intent,達到在不同 activity 間傳遞參數的效果。

 

跳轉 Activity 時傳遞物件

若要在跳轉 Activity 時傳遞物件,所要傳遞的物件必須 implements Serializable,接著我們才能透過 Bundle.putSerializable(Key,Object) 的方式,實現物件的傳遞。

相關程式碼片段如下 –

透過 putSerializable() 實作

透過 Bundle.putSerializable() 的方式,可以輕易地完成物件的傳遞,當然若是把物件宣告成 public static 型別,我們亦可以不用傳遞物件,直接對物件本身做操作。

 

從 A 跳轉到 B,再從 B 傳參數回去

在上面的例子中,我們都是透過 startActivity() 的方式來開啟新的活動 (Activity),讓 activity 由 A 跳轉至 B,但有時候我們會需要知道一些跳轉到 B 以後的判斷,來決定 A 所要執行的動作,這時候,我們就需要使用 startActivityForResult(),讓應用程式從 A 跳轉至 B 後,再從 B 傳參數回去給 A。

以下直接透過程式碼片段做說明 –

startActivityForResult() 實作

當我們由 A activity 使用 startActivityForResult() 時,我們通常會傳入一個宣告為 static int 型別的識別碼,並在 onActivityResult() 中覆寫方法,以接收從 B activity 傳回來的參數並執行判斷,在 onActivityResult() 內,共有三個參數分別是 requestCoderesultCodedata,其中 requestCode 記錄著由 A 所傳出去的識別碼,resultCode 記錄著在 B 裡面透過 setResult() 函式設定的識別碼,data 則記錄著 setResult() 函式所夾帶的參數。

賽肥膩膩

我們是低調到不行的肥膩夫妻檔,一路上一邊吵鬧一邊記錄著生活大小事,最近迷上了宅在家追劇,希望能透過文字將所有看過的影集好好紀錄,整理成屬於我們自己的回憶資料庫。

上 / 下一篇文章

臉書留言

一般留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *