iT邦幫忙

DAY 22
1

以「寶寶聯絡簿」為例,適合 Android 初學者的學習筆記系列 第 22

寶寶生活記錄 App (Day22 「新增寶寶」實作-1)

  • 分享至 

  • xImage
  •  

今天的內容較為簡單,建議非初學者直接略過。

昨天已經將「新增寶寶」的使用者界面 (XML) 設計好,今天要來討論程式 (Java) 的部分了,有兩個重點:(1) 如何建立一個新的 Activity 和 (2) 如何啟動新的 Activity。

首先討論如何建立一個新的 Activity,這系列的文章剛開始時,筆者就有說過,初學者可以把 Activity 想成是是一個畫面,之前討論過的 CalendarActivity (對應的使用者界面檔是 activity_calendar.xml)是一個顯示月曆的畫面 (Activity),而「新增寶寶」又是另一個畫面 (Activity),昨天已經討論過這個畫面的使用者介面(XML檔),今天要建立一個新的 Activity 類別,並說明如何啟動這個新的 Activity。

首先筆者反白 lincyu.babylog,按右鍵選擇 New -> Package,然後輸入 babymanager,也就是筆者打算把新的 Activity 建立在 lincyu.babylog.babymanager 下,建立新的 Activity 的「標準」做法如下:反白 babymanager,按右鍵選擇 New -> Activity -> Blank Activity,然後輸入適當的 Activity Name, Layout Name 和 Title 就可以了,建立好新的 Activity 後,專案會產生三個新改變:

  1. lincyu.babylog.babymanager 下產生一個新的 Java 檔,其中主檔名為 Activity Name。
  2. /Babylog/app/src/main/res/layout 下產生一個 xml 檔,其中主檔名為 Layout Name。
  3. 在 /Babylog/app/src/main/AndroidManifest.xml 這份 XML 文件中,application 標籤內會自動新增一個 activity 標籤,這個 activity 標籤的 android:name 屬性是對應的 Java Class,android:label 屬性的屬性值則是建立 Activity 時所輸入的 Title。

其中 AndroidManifest.xml 個改變需要特別說明一下,讀者是否還記得,筆者在介紹 Implicit Intent 時,曾經說過 Intent 送到系統後,系統會去檢查它的 Activity List 裏有哪些 Activity 可以幫忙處理這個 Implicit Intent,而系統是如何維護這個 Activity List 呢?答案就是當我們新增一個 Activity 時,應該於 AndroidManifest.xml 幫這個 Activity 利用 activity 標籤做註冊。

筆者有時會用「非標準」的做法新增 Activity,例如新增一個空類別,然後自己撰寫程式碼,讓這個新類別繼承 Activity,或者複製既有的 Activity 類別,然後貼上時更換類別名稱,如此就新增了一個新的 Activity,採用這種「非標準」做法來新增 Activity 時,別忘了我們要自己「手動」在 AndroidManifest.xml 利用 activity 標籤幫新的 Activity 做註冊。

現在我們已經新增了一個 Activity,那麼如何啟動它呢?由於這個新的 Activity (筆者將之命名為 AddBabyActivity)是從 CalendarActivity 的選單中啟動的,而 CalendarActivity 和 AddBabyActivity 是屬於同一個 App,因此不需要使用 Implicit Intent,只要使用 Explicit Intent 就可以了,關於 Implicit Intent 我們先前已經介紹過了,就是要設定一個 ACTION (字串),而 Explicit Intent 更簡單,只要設定要啟動的 Activity 的 Class 就可以了,方法是呼叫 Intent 類別的 setClass 方法,setClass需要兩個參數,第一個參數是啟動者的物件實體, 也就是 CalendarActivity 的物件實體,第二個則是被啟動者類別的 Class 物件,啟動 AddBabyActivity 的詳細程式碼如下所示:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_addbaby:
                Intent intent = new Intent();
                intent.setClass(this, AddBabyActivity.class);
                startActivity(intent);
                return true;
            case R.id.action_babylist:
                return true;
            case R.id.action_mailtodeveloper:
                mailToDeveloper();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

明天就要開始討論 AddBabyActivity 的實作。


上一篇
寶寶生活記錄 App (Day21 如何防止進入此畫面時跳出鍵盤與自訂背景的EditText)
下一篇
寶寶生活記錄 App (Day23 「新增寶寶」實作-2)
系列文
以「寶寶聯絡簿」為例,適合 Android 初學者的學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言