Android addAll()以添加嵌套的导航图,该导航图在程序上不起作用
我想在两个构建变量中有两个版本的Android addAll()以添加嵌套的导航图,该导航图在程序上不起作用,android,android-jetpack,android-jetpack-navigation,Android,Android Jetpack,Android Jetpack Navigation,我想在两个构建变量中有两个版本的nav_图,第一个变量将使用mainnav_图,第二个变量将向主nav_图添加更多的目的地,因此这使得第二个图与主nav_图重复,但目的地更多这很难同时管理和保持更新,所以为了解决这个问题,我通过代码创建一个导航图来进行动态导航,这很好,但是当我想为第二个构建变量目标添加一个嵌套图到MainGraph时,它不起作用 此文件位于主代码库中 MainGraph object MainGraph{ var id_counter = 1 private
nav_图
,第一个变量将使用main
nav_图
,第二个变量将向主nav_图
添加更多的目的地,因此这使得第二个图与主nav_图
重复,但目的地更多这很难同时管理和保持更新,所以为了解决这个问题,我通过代码创建一个导航图来进行动态导航,这很好,但是当我想为第二个构建变量目标添加一个嵌套图到MainGraph
时,它不起作用
此文件位于主代码库中
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
}
}
objectmaingraph{
变量id_计数器=1
私有值id=id\u计数器++
对象目的地{
val mainFragment=id\u计数器++
// ...
}
对象操作{
// ...
val to_设置分段=id_计数器++
}
趣味设置图(上下文:上下文,导航控制器:导航控制器){
navController.graph=navController.createGraph(id,Destinations.mainFragment){
片段(Destinations.mainFragment){
label=context.getString(R.string.app_name)
// ...
动作(动作到设置片段){
destinationId=Destinations.settingsFragment
}
}
// ...
片段(Destinations.settingsFragment){
label=context.getString(R.string.settings)
}
}
}
}
此文件仅在第二个生成变量中存在
NestedGraph
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
}
}
对象嵌套图{
val id=MainGraph.id\u计数器++
对象目的地{
val nestedFirstFragment=MainGraph.id\u计数器++
val nestedSecondFragment=MainGraph.id\u计数器++
}
对象操作{
val to_nestedSecondFragment=MainGraph.id_计数器++
}
目的地(导航控制器:导航控制器){
val navGraph=navController.createGraph(
this@NestedGraph.id,
Destinations.nestedFirstFragment
) {
片段(Destinations.nestedFirstFragment){
action(Actions.to_nestedSecondFragment){
destinationId=Destinations.nestedSecondFragment
}
}
片段(Destinations.nestedSecondFragment)
}
navController.graph.addAll(navGraph)//不工作
}
}
经过一些调试并尝试n失败后,我发现NavGraph.addAll()没有错误方法它的工作发现这只是我的错误,我在调用导航时使用了嵌套的图形id而不是目标id,如果将来有人也会出现这种行为,请确保id
变量是私有的