Fragment 代表 Activity 界面中的一部分行為或 UI 組合,擁有獨立生命週期,可動態添加/移除/替換,實現大螢幕多欄佈局與小螢幕單欄切換的自適應。
onAttach() → onCreate() → onCreateView() → onViewCreated()
→ onActivityCreated() → onStart() → onResume()
// 可見狀態
→ onPause() → onStop() → onDestroyView() → onDestroy() → onDetach()
關鍵點:onCreateView 返回根 View,onDestroyView 釋放 View 引用防洩漏,setRetainInstance(true) 可跨配置變更保留實例(僅數據,不含 View)。
<fragment android:name="...">,不可動態移除。FragmentTransaction 操作:getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new DetailFragment())
.addToBackStack(null)
.commit();
FragmentManager (v4 包 FragmentActivity/AppCompatActivity) 確保兼容性。| 方向 | 方式 | 代碼要點 |
|---|---|---|
| Activity → Fragment | Bundle + setArguments | fragment.setArguments(bundle); 在 onCreate 取 getArguments() |
| Fragment → Activity | 介面回調 | 定義 OnFragmentInteractionListener,onAttach 強轉 Context |
| Fragment ↔ Fragment | 共享 ViewModel | ViewModelProvider(requireActivity()).get(SharedVM.class) |
| 返回結果 | setTargetFragment / FragmentResultListener (API 33+) | getParentFragmentManager().setFragmentResult("key", bundle) |
onSaveInstanceState(Bundle) 存輕量數據,配合 ViewModel 處理重數據。getChildFragmentManager() 管理子 Fragment,ViewPager2 + Fragment 典型場景。setArguments(Bundle)。isAdded() 防止 Activity 已銷毀導致 Crash。onCreateView 執行耗時操作,移至 onViewCreated 或背景線程。requireContext()/requireActivity() 替代 getContext() 獲取非空引用。系統掌握上述知識體系,配合實戰練習,兩週內可從入門達到業務開發勝任水平。