能重複使用的Fragment

在第一章 我們定義程式都環繞在Activity之中,而每個Activity都搭配一個XML介面。
如果有三個頁面都需要相同的編輯畫面或是提示,難道要寫3遍嗎?!

Fragment的生命週期

可以參考一下,但別看得太入迷。(哈哈,這是跟我自己說的)
畢竟動手做才是最重要的。

建立Fragment

使用視覺化的方式建立Fragment。

滑鼠右鍵點擊 java -> New -> Fragment -> Fragment(Blank)

修改Fragment Name 為 ??? (???在此例是"TimeFragment")

取消勾選 Include fragment factory methods?
取消勾選 Include interface callbacks?
Source Language 當然是選 Kotlin
點選Finish

取消勾選主要是因為那兩項Include屬於比較進階一點的功能,
對於初學理解會是個蠻大的阻礙。
(當然你覺得你學習能力夠的可以去勾選,但初學還是別心急先求穩)

點選Finsh後自動生成

fragment_time.xml

TimeFragment.kt

修改fragment_time.xml

原始長這樣

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.savesomthingdemo.TimeFragment">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/hello_blank_fragment" />
</FrameLayout>

將原本的FrameLayout修改成ContrainLayout,並將畫面替換成一個時鐘和按鈕

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.savesomthingdemo.TimeFragment">


    <TimePicker
        android:id="@+id/timePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btnSaveTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="儲存"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/timePicker" />
</android.support.constraint.ConstraintLayout>

建立Fragment的容器(Container)

之前做的動作都是設定Fragment的外觀行為,
但別忘了fragment是用來填充Activity的物件。

這步驟決定你是否能在Activity執行時,能否正常的動態新增.替換.刪除Fragment。

主要分為靜態配置 & 動態配置,那就下篇見!

參考資料

  1. 官方fragment中文指導(主要學習資料)

  2. 避免回收替換的Fragment(來源自 小黑屋)

results matching ""

    No results matching ""