Передайте safe-args при переходе к фрагменту - PullRequest
0 голосов
/ 03 октября 2018

Очень просто передать safe-args при использовании навигации через действие (с классом направлений ).Но как передать safe-args в случае использования навигации для фрагментации напрямую?

navController?.navigate(R.id.detailFragment)

nav_graph:

<fragment
    android:id="@+id/detailFragment"
    android:name="com.example.ui.main.detail.DetailFragment"
    android:label=" "
    tools:layout="@layout/detail_fragment" >
    <argument
        android:name="templateCode"
        app:argType="string" />
    <action
        android:id="@+id/action_start_guide"
        app:destination="@id/fillInfoFragment" />
</fragment>

1 Ответ

0 голосов
/ 11 октября 2018

Хорошей идеей является использование безопасного типа, потому что это займет у вас безопасность времени компиляции и некоторое удобство.

Эта библиотека создаст класс аргумента MyDestinationArgs.Вы можете использовать его для построения Bundle и передачи результата в пункт назначения таким образом

val args = DetailFragmentArgs.Builder("template_code").build().toBundle()
navController?.navigate(R.id.confirmationAction, args) 

На стороне получателя вы можете извлекать данные также с использованием аргументов класса

val templateCode = SecondFragmentArgs.fromBundle(arguments).templateCode

Если мы не можемиспользовать библиотеку safeargs в некоторые сезоны

Мы можем передавать данные также в Bundle.Предположим, вы добавили

const val ARG_TEMPLATE_CODE = "templateCode"

константу в companion object из DetailFragment (static final поле в Java)

Теперь вы можете передавать данные

val args = Bundle()
args.putString(DetailFragment.ARG_TEMPLATE_CODE, "some_code")
navController?.navigate(R.id.confirmationAction, args)

Фрагмент получателя может получить данные из аргументов:

arguments?.getString(ARG_TEMPLATE_CODE)

Или, если целевой пункт назначения Activity, вы можете получить данные из дополнительных значений намерения (ARG_TEMPLATE_CODE константа теперь из активности пункта назначения)

intent?.extras?.getString(ARG_TEMPLATE_CODE)

Подробнее в документации здесь и здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...