Как повторно использовать фрагмент в разных навигационных графах с включенными безопасными аргументами? - PullRequest
1 голос
/ 12 января 2020

Я пытаюсь повторно использовать фрагмент в разных навигационных графах с включенными безопасными аргументами. Я заметил, что если действия отличаются, я получаю ошибку компиляции. Это связано с тем, что автоматически сгенерированный код xxxFragmentDirections сгенерирует только одно из действий.

В nav_graph_1. xml:

<navigation 
  ...
  <fragment
    android:id="@+id/myFragment"
    android:name="com.example.android.MyFragment">
    <action
      android:id="@+id/next_action"
      app:destination="@+id/dest_one" />
  </fragment>
  ...

В nav_graph_2 . xml:

<navigation 
  ...
  <fragment
    android:id="@+id/myFragment"
    android:name="com.example.android.MyFragment">
    <action
      android:id="@+id/other_action"
      app:destination="@+id/other_dest" />
  </fragment>
  ...

Простой пример использования: банковское приложение, которое имеет два потока: вывод и депозит, поэтому вы можете иметь два навигационных графика. У вас может быть AmountFragment, где вы можете просто ввести номер, и его можно использовать для снятия или депозита. Однако, в зависимости от потока, действия / назначения могут быть разными.

Тогда как можно было бы повторно использовать этот фрагмент?

1 Ответ

0 голосов
/ 14 апреля 2020

Используйте навигацию () с комплектом вместо действий в крайних случаях. Не вызывайте

findNavController().navigate(FragmentDirections.goToDetailFragment(id))

, вместо этого используйте

findNavController().navigate(R.id.DetailFragment, bundleOf("id" to 5))

Таким образом, вы не полагаетесь на сгенерированное направление, но можете использовать функции навигации и SafeArgs в DetailFragment.

https://code.allaboutapps.at/articles/android-jetpack-navigation-pitfalls/#reuse -фрагменты во множественных навигационных графах

...