Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在嵌套导航图Android中是否可以有动态目的地?_Android_Android Navigation_Android Jetpack - Fatal编程技术网

在嵌套导航图Android中是否可以有动态目的地?

在嵌套导航图Android中是否可以有动态目的地?,android,android-navigation,android-jetpack,Android,Android Navigation,Android Jetpack,我在导航图中实现了一个嵌套图,它有两个图。在第一个图中,有3个片段,在第二个图中,有2个片段。图2包括在图1中。我想导航到(图1步骤1)到(图2步骤2)。我们无法定义两个嵌套片段之间的操作。那么,我们有没有办法将动态目的地分配给导航 图1 解决方案,但不适用于嵌套图 只要类导航图扩展了导航目的地,在调用导航到子导航之前,您可以尝试以下操作来更改嵌套图的起始目的地: val graph = navController.graph.findNode(R.id.sub_nav) if (graph

我在导航图中实现了一个嵌套图,它有两个图。在第一个图中,有3个片段,在第二个图中,有2个片段。图2包括在图1中。我想导航到(图1步骤1)到(图2步骤2)。我们无法定义两个嵌套片段之间的操作。那么,我们有没有办法将动态目的地分配给导航

图1



解决方案,但不适用于嵌套图

只要
类导航图扩展了导航目的地
,在调用
导航
子导航
之前,您可以尝试以下操作来更改嵌套图的
起始目的地

val graph = navController.graph.findNode(R.id.sub_nav)
if (graph is NavGraph) {
    graph.startDestination = R.id.createNewTaskFragment
}

评论对否决票更有意义!您可以尝试手动构建NavHostFragment和Graph对象,但请记住,您不能在onCreate中访问控制器。@PaulT。任何一个例子都是有益的!这是一种魅力!谢谢,这对我们来说是可行的,它需要在嵌套图中找到精确的导航图。可以使用它来查找当前目标嵌套图:findNavController().currentDestination?.parent?.findNode(R.id.nestedGraph)。这应该被认为是正确的答案,即使是使用模块中的包含图,这种方法也解决了问题。谢谢
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/sub_nav"
    app:startDestination="@id/createNewTaskFragment">

    <fragment
        android:id="@+id/listFragment"
        android:name="com.navigationgraphexample.fragments.ListFragment"
        android:label="fragment_list"
        tools:layout="@layout/fragment_list" />
    <fragment
        android:id="@+id/createNewTaskFragment"
        android:name="com.navigationgraphexample.fragments.CreateNewTaskFragment"
        android:label="fragment_create_new_task"
        tools:layout="@layout/fragment_create_new_task" >
        <action
            android:id="@+id/action_createNewTaskFragment_to_listFragment"
            app:destination="@id/listFragment" />
    </fragment>
</navigation>
val graph = navController.graph.findNode(R.id.sub_nav)
if (graph is NavGraph) {
    graph.startDestination = R.id.createNewTaskFragment
}