iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0

1.透過佈局 XML 來添加 Fragment

我們來比較一下官方 Sample Code 跟我的實作之間的差異。

在我的電影評論應用程式,

<!-- res/layout/activity_main.xml -->
<fragment
        android:id="@+id/navHostFragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@id/bottomNavView"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/toolbar"
        app:navGraph="@navigation/navigation" />

使用<fragment><androidx.fragment.app.FragmentContainerView>的差異,在我有限的認知上是前者目前還是很多人使用。如果改成後者的官方推薦寫法(同時編譯器也會跳出同樣提示),在 navigation controller 這邊,會需要撰寫更多的程式碼來處理[註1]。

經由 activity_main.xml 這樣宣告標籤,讓 Activity 的佈局有一個容器可以置入 Fragment。


官方文件

<!-- res/layout/example_activity.xml -->
<androidx.fragment.app.FragmentContainerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.example.ExampleFragment" />

android:name屬性特定要被實例化的 Fragment class 名稱。當 Activity 的佈局膨脹(inflate),該 Fragment 也會被實例化。新實例化的 Fragment 上會調用onInflate()FragmentTransaction亦會被建立,來將 Fragment 添加至FragmentManager


參考資料


上一篇
[Day 03] Fragment 是在 Activity 的什麼階段來開始作用?
下一篇
[Day 05] Fragment 的實作 - 2 (透過程序來添加)
系列文
[Android] 在 activity 與 fragment 身上的 lifecycle30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言