[英]Use NavHostFragment in Jetpack Compose
我們有一個舊版應用程序,我們開始遷移到 Jetpack Compose。 該應用程序只有一個活動,使用帶有導航 XML 圖的導航組件在片段之間導航。
我們正在遵循這種方法:
現在,假設我們有 Fragment1 包含一些導航到 Fragment2 的操作。 在原始代碼中,我們將在 Fragment1 中調用以下代碼:
NavHostFragment.findNavController(this).navigate(directionToFragment2)
當創建一個可組合來替換 Fragment1 UI 時,我們如何實現從這個可組合到 Fragment2 的導航? 在可組合中,我們可以調用:
val navController = rememberNavController()
但這似乎是與片段使用的導航不同的導航 controller。 有沒有辦法從可組合訪問與片段使用的導航相同的導航 controller?
我們目前看到的唯一替代方法是將 Fragment 的導航 controller 作為參數傳遞給可組合對象,但它看起來不太正確。
您是正確的,您不能使用rememberNavController()
- 這將創建一個全新的嵌套NavController
僅適用於可組合目的地。
根據測試指南,強烈建議避免在您的任何可組合組件(即HomeScreen
可組合組件)中直接引用任何NavController
。 相反,建議傳入一個 lambda ,您的可組合組件可以在它想要導航時觸發。
然后,您的 Fragment(在ComposeView
上調用setContent
的那個)將負責實現該 lambda 並調用NavHostFragment.findNavController(this).navigate(directionToFragment2)
。
作為一種(不太推薦的)替代方法,您還可以使用LocalView.current.findNavController()
作為 Fragments 在視圖級別填充NavController
並且LocalView
指向托管您的 Composable 的ComposeView
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.