Android – Navigation findNavController()
發布日期:2024/11/22
瀏覽次數:26
在 Android 開發中,findNavController() 是用來操作 Navigation Component 的工具,以下詳細說明使方法的差異及使用情境:
findNavController().navigate(R.id.fragment_id)
功能
直接導航到指定的目標頁面(Fragment)。這是 Navigation Component 最常用的方式之一,用來實現頁面跳轉。
特點
- 加入導航堆疊:這個方法會將新頁面加入到返回堆疊(BackStack)中,因此可以透過返回鍵回到上一頁。
- 使用 Safe Args(若有配置):可傳遞參數到目標頁面,避免手動處理 Bundle。
適用情境
- 從一個頁面跳轉到另一個頁面時使用。
- 希望使用者能夠透過返回鍵回到前一頁。
範例
findNavController().navigate(R.id.action_current_to_target)
findNavController().popBackStack(R.id.fragment_id, false)
功能
將導航堆疊回退到指定的頁面,並將目標頁面之後的頁面從堆疊中移除。
特點
- 清除堆疊:返回到 fragment_id 所對應的頁面,並清除該頁面後的所有導航記錄。
- 保留目標頁面:因為 false 表示不移除目標頁面。
適用情境
- 使用者需要快速返回某一特定頁面,並清除該頁面後的導航歷史。
- 適用於多步表單流程,若需要取消並返回主頁時。
範例
findNavController().popBackStack(R.id.fragment_id, false)
findNavController().popBackStack()
功能
從導航堆疊中彈出(pop)一個頁面,返回到上一頁。
特點
- 逐步返回:只移除當前頁面,不會清除整個堆疊。
- 簡單返回操作:相當於點擊返回鍵的效果。
適用情境
- 使用者執行返回操作時。
- 適合於不需要精確指定目標頁面的情況下。
範例
findNavController().popBackStack()
navigateUp()
功能
類似於 popBackStack(),但會檢查父導航圖(Parent NavGraph),如果存在父導航則向上導航。
使用情境
用於多層級的導航圖結構,例如有子圖時的導航。
範例
findNavController().navigateUp()
clearBackStack(R.id.fragment_id)
功能
清除導航堆疊中的所有記錄,直到指定的目標頁面。
使用情境
重設導航流程,回到初始狀態。
範例
findNavController().clearBackStack(R.id.fragment_id)
選擇正確方式的建議
功能需求 | 建議方法 |
簡單跳轉到新頁面 | navigate() |
返回到特定頁面並清理堆疊 | popBackStack(fragment_id, false) |
單純返回上一頁 | popBackStack() 或 navigateUp() |
重設導航流程 | clearBackStack(fragment_id) |
Like