Как передать аргументы фрагменту, вызываемому из NavigationDrawer с помощью NavigationUI?
Я преобразовал свое приложение для использования NavigationUI
, Но setupWithNavController()
заменяет мой setNavigationItemSelectedListener()
,
В моем слушателе я передавал (безопасный тип) аргумент к фрагменту.
1 ответ
Если кто-то все еще ищет ответ на этот вопрос. Я нашел полезный обходной путь с глобальными действиями 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, иначе он отменит ваше поведение.
Если я правильно понимаю ваш вопрос, то, что вы ищете:
Документация по параметрам навигации
Кратко:
На вашем графике навигации к фрагменту, которому вы хотите отправить значение, вы добавите аргумент.
<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?
Удачи!