Android Kotlin 基本概念 03.1:建立片段

本程式碼研究室是 Android Kotlin 基礎課程的一部分。使用程式碼研究室逐步完成程式碼課程後,您將能充分發揮本課程的潛能。所有課程程式碼研究室清單均列於 Android Kotlin 基礎程式碼研究室到達網頁

在這個程式碼研究室中,您將瞭解片段,並在名為「AndroidTrivia」的入門應用程式中建立片段。在下一次的程式碼研究室中,您將進一步瞭解導航功能,並進一步使用 AndroidTrivia 應用程式。

須知事項

  • Kotlin 基本概念
  • 如何在 Kotlin 中建立基本 Android 應用程式
  • 版面配置的使用方式

課程內容

  • 如何在應用程式中加入靜態的片段

執行步驟

  • 在活動中建立片段。

在這堂課介紹的三個程式碼研究室中,您開發了一款稱為 AndroidTrivia 的應用程式。已完成的應用程式是一種遊戲,使用者可透過這個方式回答三個關於 Android 編碼的知識問答問題。只要正確回答這三項問題,就能贏得比賽,並分享結果。

AndroidTrivia 應用程式說明導航模式和控制項。此應用程式包含數個元件:

  • 使用者啟動遊戲時,在畫面左下方的螢幕截圖畫面中,使用者啟動了遊戲。
  • 使用者如在遊戲中間顯示問題 (如上方中間所示),使用者會玩遊戲並提交答案。
  • 導覽匣 (如右側所示) 會從應用程式側邊滑出,其中包含包含標頭的選單。導覽匣圖示 開啟導覽匣。導覽匣選單包含「關於」頁面的連結和遊戲規則的連結。

應用程式頂端會顯示稱為應用程式列的彩色檢視,又稱為動作列

在本程式碼研究室中,您從入門應用程式著手,在完成 Trivia 應用程式時,可以取得所需的範本程式碼和片段類別。

  1. 下載 AndroidTrivia-Starter Android Studio 專案。
  2. 在 Android Studio 中開啟專案並執行應用程式。應用程式開啟後,除了顯示應用程式名稱和空白畫面之外,並不會執行任何操作。


  3. 在 Android Studio 專案窗格中,開啟 Project: Android 視圖來探索專案檔案。開啟 app > java 資料夾以查看 MainActivity 類別和片段類別。

  4. 開啟 res >Layout 資料夾,然後按兩下 activity_main.xmlactivity_main.xml 檔案會顯示在版面配置編輯器中。
  5. 按一下 [設計] 分頁標籤。activity_main.xml 檔案的「元件樹狀結構」會將根版面配置顯示為垂直 LinearLayout



    在垂直線性版面配置中,版面配置中的所有子項檢視都會垂直對齊。

片段代表活動中的特定行為或使用者介面 (UI),您可以將多個片段結合為單一活動,建立多窗格使用者介面,並在多個活動中重複使用單一片段。

可以將片段視為活動的模組化區塊,就像「其他活動」一樣,也可以用於其他活動:

  • 片段具有專屬的生命週期,並會接收其本身的輸入事件。
  • 您可以在活動進行期間新增或移除片段。
  • 片段是由 Kotlin 類別定義。
  • XML 版面配置檔案會定義片段的 UI。

AndroidTrivia 應用程式有主要活動,其中有數個片段。已為您定義大部分片段及其版面配置檔案。在這項工作中,您會建立片段並將片段新增至應用程式的主要活動。

步驟 1:新增片段類別

在這個步驟中,您會建立一個空白的 TitleFragment 類別。首先,為新片段建立 Kotlin 類別:

  1. 在 Android Studio 中,按一下「專案」窗格內的任何一處,即可將焦點移回專案檔案。例如,按一下「com.example.android.navigation」資料夾。
  2. 選取 [File > New > Fragment > Fragment (Empty)]
  3. 針對片段名稱,請使用 TitleFragment。清除所有核取方塊,包括「Create Layout XML (建立版面配置 XML)」、「納入片段的片段方法」和「包括介面回呼」
  4. 按一下 [完成]。
  5. 如果 TitleFragment.kt 片段檔案尚未開啟,請開啟該檔案。其中包含 onCreateView() 方法,也就是片段片段中所使用的方法之一。
  6. onCreateView() 中移除 return TextView(activity).apply 部分,包括開頭為 setText 的行。onCreateView() 函式僅含下列程式碼:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                         savedInstanceState: Bundle?): View? {
}

建立繫結物件

系統現在將停止編譯片段。如要讓片段經過編譯,您必須建立繫結物件並強化片段檢視 (相當於使用 setContentView() 進行活動)。

  1. TitleFragment.ktonCreateView() 方法中建立 binding 變數 (val binding)。
  2. 為了加強片段的視圖,請呼叫片段 Binding 物件的 DataBindingUtil.inflate() 方法,也就是 FragmentTitleBinding

    將四個參數傳入方法中:
  • inflater,這是用來為繫結版面配置加載的 LayoutInflater
  • 要展開的版面配置的 XML 版面配置資源。請使用已為您定義的其中一個版面配置 R.layout.fragment_title
  • container (ViewGroup) 的上層(此為選用參數)。
  • false 的值為 attachToParent
  1. DataBindingUtil.inflate 傳回的繫結指派給 binding 變數。
  2. 從包含原始檢視畫面的方法傳回 binding.root。您的 onCreateView() 方法現在如下所示:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                         savedInstanceState: Bundle?): View? {
   val binding = DataBindingUtil.inflate<FragmentTitleBinding>(inflater,
           R.layout.fragment_title,container,false)
   return binding.root
   }

步驟 2:將新片段加入主要版面配置檔案

在這個步驟中,您會將 TitleFragment 加到應用程式的 activity_main.xml 版面配置檔案。

  1. 開啟 res >Layout > activity_main.xml,然後按一下 [Text] 分頁標籤,查看版面配置的 XML 程式碼。
  2. 在現有的 LinearLayout 元素內部新增 fragment 元素。
  3. 將片段 ID 設為 titleFragment
  4. 將片段名稱設為片段類別的完整路徑,在本例中為 com.example.android.navigation.TitleFragment
  5. 將版面配置寬度和高度設為 match_parent
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <fragment
                android:id="@+id/titleFragment"
                android:name="com.example.android.navigation.TitleFragment"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                />
        </LinearLayout>

</layout>
  1. 執行應用程式。已將片段新增至主畫面。

Android Studio 專案:AndroidTriviaFragment

在這個程式碼研究室中,您將片段新增至 AndroidTrivia 應用程式,在本課程中,您將在接下來兩個程式碼研究室中繼續學習。

  • 片段是活動的模組性部分,
  • 片段具有專屬的生命週期,並會接收其本身的輸入事件。
  • 在 XML 版面配置檔案中,使用 <fragment> 標記定義片段的版面配置。
  • onCreateView() 中讓片段的版面配置展開。
  • 您可以在活動進行期間新增或移除片段。

Udacity 課程:

Android 開發人員說明文件:

這個部分會列出在代碼研究室中,受老師主導的課程作業的可能學生作業。由老師自行決定要執行下列動作:

  • 視需要指派家庭作業。
  • 告知學生如何提交家庭作業。
  • 批改家庭作業。

老師可視需要使用這些建議,並視情況指派其他合適的家庭作業。

如果您是自行操作本程式碼研究室,歡迎透過這些家庭作業來測試自己的知識。

回答這些問題

第 1 題

片段和活動之間有何差異?請選取所有正確的敘述。

  • 建立片段時,您需在 onCreateView() 方法中展開版面配置。建立活動時,您可以將 onCreate() 中的版面配置展開。
  • 活動有各自的版面配置,但片段不能有自己的版面配置。
  • 一個活動有各自的生命週期,但一個片段沒有。
  • 為片段或活動套用版面配置時,您可以將版面配置參照為 R.layout.layoutname

第 2 題

以下關於片段的敘述何者正確?請選取所有適用選項。

  • 您可以在多個活動中使用片段。
  • 一個活動可以包含多個片段。
  • 在 Kotlin 類別中定義片段後,系統就會自動將片段新增至 activity_main.xml 版面配置檔案。
  • 在版面配置中要插入片段的位置,使用 <fragment> 標記來定義地點。

開始下一門課程:3.2 定義導覽路徑

如要瞭解本課程中其他程式碼研究室的連結,請參閱 Android Kotlin 基礎程式碼程式碼到達網頁