как передать аргументы фрагменту, вызываемому из NavigationDrawer с помощью NavigationUI? - PullRequest
0 голосов
/ 15 ноября 2018

Я конвертировал свое приложение для использования NavigationUI. Но setupWithNavController() заменяет мой setNavigationItemSelectedListener().

В моем слушателе я передавал (безопасный тип) аргумент фрагменту.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Если кто-то все еще ищет ответ на этот вопрос. Я нашел полезный обходной путь с NavigationUI Глобальные действия (работа с альфа-09)

Вы можете указать действие верхнего уровня для графика навигации:

<?xml version="1.0" encoding="utf-8"?>
    <navigation xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/main_nav"
        app:startDestination="@id/mainFragment">
        ...
        <action android:id="@+id/action_global_mainFragment"
               app:destination="@id/mainFragment"/>
   </navigation>

И используйте его с вашим навигационным контроллером для навигации с правильным набором, когда пользователь нажимает на элемент меню. Будьте осторожны, чтобы удалить вызов .setupWithNavController (navController) из вашего NavigationView, иначе он отменит ваше поведение.

0 голосов
/ 02 декабря 2018

Если я правильно понимаю ваш вопрос, то вы ищете:

Документация по параметрам навигации

Кратко:

На вашем навигационном графике к фрагменту, которому вы хотите отправить значение, вы добавите аргумент.

<fragment android:id="@+id/myFragment" >
    <argument
        android:name="amount"
        app:argType="integer"
        android:defaultValue="0" />
</fragment>

Когда вы затем ссылаетесь на этот фрагмент как действие, библиотека генерирует класс Directories, который будет выглядеть примерно так:

 val action = SpecifyAmountFragmentDirections.confirmationAction(amount)
 v.findNavController().navigate(action)

Имена генерируются на основе того, что вы назвали Фрагмент и действия. Также обратите внимание на то, что можно отправлять целые объекты, если они также являются Parcelable.

Если рассматриваемый фрагмент является начальным пунктом назначения вашего графика, я не уверен, что вы сможете сделать это сразу. Обходным путем может быть загрузка данных во фрагмент? Или, может быть, в общую ViewModel из Activity?

Удачи!

...