iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
Mobile Development

[Android] 在 activity 與 fragment 身上的 lifecycle系列 第 7

[Day 07] Fragment 的實作 - 初探 Fragment manager (Jetpack Navigation 的底層)

  • 分享至 

  • xImage
  •  

一樣是在面試場景:如果不使用 Jetpack Navigation,你還可以怎麼做來達到 Fragment 的跳轉?

實作時,使用 Jetpack Navigation 來設定底部導航列對應 Fragment 的切換確實方便。

但有時候,別人更想知道你怎麼看待在多個 Fragment 之間切換的本質。

FragmentManager class 負責在應用程式的 Fragment 相關操作,像是添加、移除和替換,以及將這些操作加入至背景堆疊 / 背景堆棧(back stack)。

如果你使用 Jetpack Navigation Library,你可能永遠不會與FragmentManager直接互動。因為 Jetpack Navigation Library 幫助你使用了FragmentManager。不過,任何使用 Fragment 的應用程式某程度上都使用到FragmentManager。因此,我們需要瞭解FragmentManager是什麼,以及它如何運作。

使用 FragmentManager

在 Activity 使用

每個FragmentActivity和子類別(例:AppCompatActivity),都能透過getSupportFragmentManager()方法來使用 FragmentManager。

在 Fragment 使用

Fragment 也能持有一個或多個子 Fragment。你可以透過getChildFragmentManager()來取得 FragmentManager 的引用,以便管理子 Fragment。如果你需要使用父級 FragmentManager,可使用getParentFragmentManager()

https://ithelp.ithome.com.tw/upload/images/20220913/20151956WL2hnPhnRK.png
[圖1] 兩個 UI 佈局範例顯示 Fragments 與 它們持有者 Activities 的關係。

圖1 的兩個例子都只有一個 Activity。Activity 透過BottomNavigationView向使用者顯示頂層(top-level)導航。BottomNavigationView負責在應用程式不同的畫面上,置換 host fragment。其中每個畫面都以分隔的 Fragment 來實現。

範例1,host fragment 持有2個子 Fragment,來形成雙視窗(split-view)畫面。

範例2,host fragment 持有1個子 Fragment,來顯示滑動視圖(swipe view)的 Fragment。


參考資料


上一篇
[Day 06] Fragment 的實作 - 2 (透過程序來添加) / 提供初始化資料
下一篇
[Day 08] Fragment 的實作 - Fragment manager / 子 Fragment 與父級的互動
系列文
[Android] 在 activity 與 fragment 身上的 lifecycle30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言