2

我需要将相同的片段添加到不同的导航图中。这是第一张图的一段代码(mobile_navigation

<fragment
    android:id="@+id/nav_contactanos"
    android:name="com.engie.mexico.micuenta.Fragments.FragmentContactanosCliente"
    tools:layout="@layout/fragment_contactanos_cliente" >
    <action
        android:id="@+id/action_nav_contactanos_to_nav_aviso_privacidad"
        app:destination="@id/nav_aviso_privacidad" />
    <action
        android:id="@+id/action_nav_contactanos_to_nav_terminos_condiciones"
        app:destination="@id/nav_terminos_condiciones" />
    <action
        android:id="@+id/action_nav_contactanos_to_nav_mensaje_usuario"
        app:destination="@id/nav_mensaje_usuario" />
</fragment>

第二个导航图中的第二个代码片段 ( navigation_initial )

    <fragment
    android:id="@+id/nav_contactanos_cliente"
    android:name="com.engie.mexico.micuenta.Fragments.FragmentContactanosCliente"
    tools:layout="@layout/fragment_contactanos_cliente" >
    <action
        android:id="@+id/action_nav_contactanos_cliente_to_nav_mensaje_usuario"
        app:destination="@id/nav_mensaje_usuario" />
    <action
        android:id="@+id/action_nav_contactanos_cliente_to_nav_terminos_condiciones"
        app:destination="@id/nav_terminos_condiciones" />
    <action
        android:id="@+id/action_nav_contactanos_cliente_to_nav_aviso_privacidad"
        app:destination="@id/nav_aviso_privacidad" />
</fragment>

当我尝试 MakeProject 时,构建输出显示错误:

C:\Android\MiCuenta\app\src\main\java\com\engie\mexico\micuenta\Fragments\FragmentContactanosCliente.java:478: error: cannot find symbol
            FragmentContactanosClienteDirections.ActionNavContactanosToNavMensajeUsuario action = symbol:   class ActionNavContactanosToNavMensajeUsuario

位置:类 FragmentContactanosClienteDirections

但是当我评论第二段代码(navigation_initial)时,问题就消失了。问题是我需要第二段代码,因为我需要调用片段并与它共享捆绑包、其他信息并显示不同的东西......如何实现这一点?

我还分享了图表的设计:

移动导航

mobile_navigation.xml(设计)

导航_初始

navigation_initial.xml(设计)

4

1 回答 1

2

类的名称Directions基于 Fragment 的名称,并且一次只能有一个特定类的实例。根据Safe Args 的这个问题,当您从另一个图表的一个方向覆盖一个方向类时,没有警告 - 最后一个获胜。这就是为什么在不同的图中重用相同的片段会使第一个图中的 Directions 类无效。

当然,如果你的第二个图的片段有不同的动作、不同的参数或任何不同的东西,它也应该有一个不同的片段类——如果你的单个片段类要使用另一个图的参数或动作,他们会失败,因为它们不会存在于该图中。

如该错误中所述:

For a destination with an android:name, you'd want to include that android:name in only one place in your graph, referencing that shared destination from all of the places that need access to it (as a destination can access any sibling destinations of their parent graph).

于 2020-08-19T23:54:17.603 回答