Когда я добавляю тот же фрагмент во второй навигационный график, не распознается класс Action

#android #navigation #android-navigation-graph #android-safe-args

#Android #навигация #android-navigation-graph #android-safe-args

Вопрос:

Мне нужно добавить один и тот же фрагмент в разные навигационные графики. Это фрагмент кода первого графика (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_inicial)

     <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:AndroidMiCuentaappsrcmainjavacomengiemexicomicuentaFragmentsFragmentContactanosCliente.java:478: error: cannot find symbol
            FragmentContactanosClienteDirections.ActionNavContactanosToNavMensajeUsuario action = symbol:   class ActionNavContactanosToNavMensajeUsuario
  

расположение: класс FragmentContactanosClienteDirections

Но когда я комментирую второй фрагмент кода (navigation_inicial), проблема исчезает. Дело в том, что мне нужен второй фрагмент кода, потому что мне нужно вспомнить фрагмент и поделиться с ним пакетами, с другой информацией и показать разные вещи… Как этого добиться?

Я также разделяю дизайн графиков:

mobile_navigation

mobile_navigation.xml (дизайн)

navigation_inicial

navigation_inicial.xml (дизайн)

Ответ №1:

Имя Directions класса основано на имени фрагмента, и одновременно может существовать только один экземпляр определенного класса. Согласно этой проблеме с безопасными аргументами, при перезаписи одного класса Directions из одного из другого графика предупреждение не выдается — выигрывает последний. Вот почему повторное использование того же фрагмента в другом графике делает недействительным класс Directions из первого графика.

Конечно, если фрагмент вашего второго графика имеет разные действия, разные аргументы или вообще что-либо другое в нем, у него также должен быть другой класс fragment — если бы ваш отдельный класс fragment использовал аргументы или действия из другого графика, они потерпели бы неудачу, поскольку они не существовали бы в этом графике.

Как упоминалось в этой ошибке:

Для пункта назначения с android: name вы бы хотели включить это android: name только в одно место вашего графика, ссылаясь на это общее назначение из всех мест, которым требуется доступ к нему (поскольку пункт назначения может обращаться к любым родственным пунктам назначения своего родительского графика).

Комментарии:

1. Читаю проблему с безопасными аргументами, поэтому я не могу повторно использовать код в этом конкретном случае? Если быть более конкретным, у меня есть экран контакта, пользователь может получить его с помощью кнопки на экране входа в систему и после входа во многих местах, поэтому я должен показывать один и тот же экран во многих местах, вот почему я хотел, чтобы то, о чем идет речь, было объяснено, но, похоже, мне нужно искать другой способ, верно?

2. Вы действительно не объяснили, почему у вас есть два графика в первую очередь. Также обратите внимание, что вы должны обрабатывать login в соответствии с документом условной навигации и, в частности, не в качестве начального пункта назначения вашего графика в соответствии с обсуждением навигации .

3. Я видел документацию и видео, на которые вы ссылались, и вы правы, на самом деле я делаю плохую практику и ненужные вещи, например, у меня есть два действия для обработки всех фрагментов, одна сторона для всех, связанных с Login, а другая сторона для обработки всех связанных при входе в систему … и на самом деле это плохо, и вот почему я должен использовать два графика, это проблема архитектуры… Я приветствую ваш ответ, потому что он был самым полезным, большое спасибо за то, что вы уделили время ответу и поделились своими рекомендациями.