Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TabLayout上でのFragmentManagerとBackstackの管理方法 / H...

TabLayout上でのFragmentManagerとBackstackの管理方法 / How to manage FragmentManager and Backstack on TabLayout

Yappli Tech Conference 2023 登壇資料

connpass:
https://yappli.connpass.com/event/295001/

セッション動画(YouTube:)
https://youtu.be/TqEQ7e09cUE?si=B7TXcEy_RuHEunBm

Yappli Developers

December 04, 2024
Tweet

More Decks by Yappli Developers

Other Decks in Programming

Transcript

  1. Speaker プロダクト開発本部 開発1部 Android グループ Android エンジニア 張 哲于 •

    張哲于、ニックネーム「てつ」 • Android 歴約10年 (1.6から) • 仕事のモチベーションは、困っている 人 に 自 分も 欲しいものを作って届けること • 現在発信 力 を 高 める努 力 をしている
  2. ブレイクダウン 1 . ページの遷移と戻る 2 . 最初のページに戻る 3 . 一

    個前のタブに戻る 4 . タブ内容の状態を維持する 5 . ページとタブの戻る動作が併存できる 0 1 TabLayout の画 面 遷移でよく挙げられる要望 タブ タブ タブ ページ
  3. • Index: 0, Id: 0246787931 • Index: 1, Id: 234788107

    • Index: 2, Id: 125561020 • Index: 3, Id: 14409808 1 Demo 02 各要望の実装法とデモ実演 - ページの遷移と戻る Fragment
  4. 2 1. ページの遷移と戻る - FragmentTransaction Stack Index 0 Index 2

    Index 1 Stack Index 0 Index 1 Index 2 add 実装
  5. 3 1. ページの遷移と戻る - FragmentTransaction pop Stack Index 0 Index

    2 Index 1 Stack Index 0 Index 1 実装(続き)
  6. • Index: 0, Id: 156988707 • Index: 1, Id: 101360987

    • Index: 2, Id: 100894719 • Index: 3, id: 208129123 1 Demo 02 各要望の実装法とデモ実演 - 最初のページに戻る Fragment
  7. 2. 最初のページに戻る - FragmentManager ページ Fragment タブ Fragment FragmentManager FragmentManager

    FragmentActivity .supportFragmentManager .childFragmentManager .parentFragmentManager .parentFragmentManager 3 実装(続き)
  8. • EMPTY (0) • CHILD (1) • KEEP (2) •

    CHILD (1) • KEEP (2) • EMPTY (0) 1 Demo 02 各要望の実装法とデモ実演 - タブの遷移と戻る Fragment
  9. 3. タブの遷移と戻る - FragmentManager ページ Fragment タブ Fragment FragmentManager FragmentManager

    FragmentActivity .supportFragmentManager .childFragmentManager .parentFragmentManager .parentFragmentManager 2 実装
  10. • 入力 内容: 1234 • 回転前 → 回転後 • SaveState:

    なし → 1234 • ページ戻る • SaveState: なし 1 Demo 02 各要望の実装法とデモ実演 - タブ内容の状態を維持する Fragment
  11. A B C ViewModel ViewState SaveState • 自身 の状態を管理する役割 •

    IDがあれば 自 動的に状態を保持する • カスタムビューの場合、他の実装が必要 • フラグメント動的状態を管理する役割 • Framgentライフサイクルでアクセス • ビジネスロジック、画 面 レベルの状態ホルダー • 画 面 の回転など構成が変更されたときの対応 手 段 • セーブステイトはSavedStateHandleで対応可能 4. タブ内容の状態を維持する
  12. • EMPTY (0) index: 0 • CHILD (1) index: 0

    • CHILD (1) index: 1 • CHILD (1) index: 2 • KEEP (2) index: 0 • CHILD (1) index: 2 →όοΫΞΫγϣϯ • CHILD (1) index: 1 1 Demo 02 各要望の実装法とデモ実演 - ページとタブの戻る動作が併存できる Fragment
  13. Stack 5. ページとタブの戻る動作が併存できる ϖʔδ Stack (Child) Index 0 Index 1

    Index 2 ϖʔδ Stack (Empty) ϖʔδ Stack (Keep) ϖʔδ Stack (Child) Index 0 Index 1 Index 2 2 BackStack
  14. 1 2 3 その他 なりやすい対象 検出 手 段 • ViewBinding

    • Receiver • ライブラリ:LeakCanary • WeakReferenceの利 用 1 . Memory Leak
  15. • Activity と Fragment 内に追加する順番 • 例: • Activity側 →

    onCreate() • Fragment側 → onCreateView() 1 Lifecycle 2 . Lifecycle OnBackPressedDispatcher