NavGraph.addAll() 以编程方式添加嵌套导航图不起作用
NavGraph.addAll() to add nested nav graph progamatically not working
我想在两个构建变体中有两个版本的 nav_graph
,所以第一个变体将使用 main
nav_graph
,第二个变体将向 nav_graph
添加更多目的地main nav_graph
所以这使得第二个图表与 main nav_graph
重复,但是有更多的目的地很难同时管理和保持更新所以为了解决这个问题我通过创建一个动态导航按代码导航图工作正常但是当我想为第二个构建变体目的地添加嵌套图到 MainGraph
它不起作用
此文件在主代码库中
主图
object MainGraph{
var id_counter = 1
private val id = id_counter++
object Destinations {
val mainFragment = id_counter++
// ...
}
object Actions {
// ...
val to_settingsFragment = id_counter++
}
fun setGraph(context: Context, navController: NavController) {
navController.graph = navController.createGraph(id, Destinations.mainFragment) {
fragment<MainFragment>(Destinations.mainFragment) {
label = context.getString(R.string.app_name)
// ...
action(Actions.to_settingsFragment) {
destinationId = Destinations.settingsFragment
}
}
// ...
fragment<SettingsFragment>(Destinations.settingsFragment) {
label = context.getString(R.string.settings)
}
}
}
}
此文件仅在第二个构建变体中
嵌套图
object NestedGraph {
val id = MainGraph.id_counter++
object Destinations {
val nestedFirstFragment = MainGraph.id_counter++
val nestedSecondFragment = MainGraph.id_counter++
}
object Actions {
val to_nestedSecondFragment = MainGraph.id_counter++
}
fun addDestinations(navController: NavController) {
val navGraph = navController.createGraph(
this@NestedGraph.id,
Destinations.nestedFirstFragment
) {
fragment<NestedFirstFragment>(Destinations.nestedFirstFragment) {
action(Actions.to_nestedSecondFragment) {
destinationId = Destinations.nestedSecondFragment
}
}
fragment<NestedSecondFragment>(Destinations.nestedSecondFragment)
}
navController.graph.addAll(navGraph) // not working
}
}
经过一些调试并尝试失败后,我发现 NavGraph.addAll() 方法没有错,它的工作发现这只是我的错误,我在调用 [= 时使用了嵌套图形 ID 而不是目标 ID 10=] 如果将来有人也有这种行为,请确保将 id
变量设为私有
我想在两个构建变体中有两个版本的 nav_graph
,所以第一个变体将使用 main
nav_graph
,第二个变体将向 nav_graph
添加更多目的地main nav_graph
所以这使得第二个图表与 main nav_graph
重复,但是有更多的目的地很难同时管理和保持更新所以为了解决这个问题我通过创建一个动态导航按代码导航图工作正常但是当我想为第二个构建变体目的地添加嵌套图到 MainGraph
它不起作用
此文件在主代码库中
主图
object MainGraph{
var id_counter = 1
private val id = id_counter++
object Destinations {
val mainFragment = id_counter++
// ...
}
object Actions {
// ...
val to_settingsFragment = id_counter++
}
fun setGraph(context: Context, navController: NavController) {
navController.graph = navController.createGraph(id, Destinations.mainFragment) {
fragment<MainFragment>(Destinations.mainFragment) {
label = context.getString(R.string.app_name)
// ...
action(Actions.to_settingsFragment) {
destinationId = Destinations.settingsFragment
}
}
// ...
fragment<SettingsFragment>(Destinations.settingsFragment) {
label = context.getString(R.string.settings)
}
}
}
}
此文件仅在第二个构建变体中
嵌套图
object NestedGraph {
val id = MainGraph.id_counter++
object Destinations {
val nestedFirstFragment = MainGraph.id_counter++
val nestedSecondFragment = MainGraph.id_counter++
}
object Actions {
val to_nestedSecondFragment = MainGraph.id_counter++
}
fun addDestinations(navController: NavController) {
val navGraph = navController.createGraph(
this@NestedGraph.id,
Destinations.nestedFirstFragment
) {
fragment<NestedFirstFragment>(Destinations.nestedFirstFragment) {
action(Actions.to_nestedSecondFragment) {
destinationId = Destinations.nestedSecondFragment
}
}
fragment<NestedSecondFragment>(Destinations.nestedSecondFragment)
}
navController.graph.addAll(navGraph) // not working
}
}
经过一些调试并尝试失败后,我发现 NavGraph.addAll() 方法没有错,它的工作发现这只是我的错误,我在调用 [= 时使用了嵌套图形 ID 而不是目标 ID 10=] 如果将来有人也有这种行为,请确保将 id
变量设为私有