#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
Ответ №1:
Имя Directions
класса основано на имени фрагмента, и одновременно может существовать только один экземпляр определенного класса. Согласно этой проблеме с безопасными аргументами, при перезаписи одного класса Directions из одного из другого графика предупреждение не выдается — выигрывает последний. Вот почему повторное использование того же фрагмента в другом графике делает недействительным класс Directions из первого графика.
Конечно, если фрагмент вашего второго графика имеет разные действия, разные аргументы или вообще что-либо другое в нем, у него также должен быть другой класс fragment — если бы ваш отдельный класс fragment использовал аргументы или действия из другого графика, они потерпели бы неудачу, поскольку они не существовали бы в этом графике.
Как упоминалось в этой ошибке:
Для пункта назначения с android: name вы бы хотели включить это android: name только в одно место вашего графика, ссылаясь на это общее назначение из всех мест, которым требуется доступ к нему (поскольку пункт назначения может обращаться к любым родственным пунктам назначения своего родительского графика).
Комментарии:
1. Читаю проблему с безопасными аргументами, поэтому я не могу повторно использовать код в этом конкретном случае? Если быть более конкретным, у меня есть экран контакта, пользователь может получить его с помощью кнопки на экране входа в систему и после входа во многих местах, поэтому я должен показывать один и тот же экран во многих местах, вот почему я хотел, чтобы то, о чем идет речь, было объяснено, но, похоже, мне нужно искать другой способ, верно?
2. Вы действительно не объяснили, почему у вас есть два графика в первую очередь. Также обратите внимание, что вы должны обрабатывать login в соответствии с документом условной навигации и, в частности, не в качестве начального пункта назначения вашего графика в соответствии с обсуждением навигации .
3. Я видел документацию и видео, на которые вы ссылались, и вы правы, на самом деле я делаю плохую практику и ненужные вещи, например, у меня есть два действия для обработки всех фрагментов, одна сторона для всех, связанных с Login, а другая сторона для обработки всех связанных при входе в систему … и на самом деле это плохо, и вот почему я должен использовать два графика, это проблема архитектуры… Я приветствую ваш ответ, потому что он был самым полезным, большое спасибо за то, что вы уделили время ответу и поделились своими рекомендациями.