Проблема, с которой я столкнулся, связана с программной настройкой графика навигации.Чего я хочу добиться, так это решить в Activity
, какой фрагмент должен быть начальным пунктом назначения.Более того, у каждого из этих фрагментов есть дополнительные аргументы.
Допустим, у нас есть такой график навигации:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph">
<fragment
android:id="@+id/fragment1"
android:name="com.mypackage.Fragment1"
tools:layout="@layout/layout_fragment1">
<argument
android:name="argument1"
app:argType="int" />
</fragment>
<fragment
android:id="@+id/fragment2"
android:name="com.mypackage.Fragment2"
tools:layout="@layout/layout_fragment2">
<argument
android:name="argument2"
app:argType="string" />
</fragment>
</navigation>
Если мы используем плагин Safe Args (androidx.navigation.safeargs.kotlin
), два класса будутсгенерировано: Fragment1Args
и Fragment2Args
, оба реализуют интерфейс NavArgs
.
Теперь, когда нам нужно решить, какой фрагмент должен стать начальным пунктом назначения, нам нужно сделать граф программно:
val graph = navController.navInflater.inflate(R.navigation.nav_graph)
if (someCondition) {
graph.startDestination = R.id.fragment1
} else {
graph.startDestination = R.id.fragment2
}
navController.graph = graph
Но Fragment1 и Fragment2 требуют дополнительных аргументов, поэтому нам нужно как-то добавить их в граф.Оказывается, у графа есть метод addArguments(NavArguments)
, но, как вы видите, это не интерфейс NavArgs
.Вопрос в том, как правильно установить эти аргументы, которые Fragment1 или Fragment2 смогут извлечь?
Я использую 1.0.0-rc02
версию фреймворка навигации.