Пакет аргументов NavDeepLinkBuilder не получен в целевом фрагменте - PullRequest
0 голосов
/ 11 июля 2020

У меня есть 2 действия узла навигации - Activity A и Activity B с каждым собственным набором навигационных графиков. Я хочу перейти от FragmentA, который находится в навигационном графе, размещенном в Activity A, к FragmentB, который находится в навигационном графе, размещенном в Activity B, для выполнения sh, который я пробовал явную глубокую ссылку. Однако независимо от того, как я не могу получить аргумент в FragmentB, это всегда значение по умолчанию. Я использую безопасные аргументы. Что я делаю не так?

update: похоже, проблема начинается с недоступного графа навигации. Присмотревшись к журналу, я понял, что NavController зарегистрировал следующее сообщение:

Не удалось найти пункт назначения com.myapp.app:id/nav_graph_b в навигационном графе, игнорируя глубокую ссылку из Intent. ...

навигационный граф размещается на хосте B, который установлен в setComponentName. Почему тогда график недоступен?

deeplink

val bundle = Bundle()
bundle.putInt("theIntKey", theInt)

val pendingIntent = NavDeepLinkBuilder(requireContext())
    .setComponentName(NavHostActivityB::class.java)
    .setGraph(R.navigation.nav_graph_b)
    .setDestination(R.id.fragmentB)
    .setArguments(bundle)
    .createPendingIntent()
    .send()

navgraph

  <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_b"
    app:startDestination="@id/fragmentC"
    tools:ignore="UnusedNavigation">
    
        <fragment
            android:id="@+id/fragmentB"
            android:name="FragmentB">
            <argument
                android:name="theIntKey"
                app:argType="integer"
                android:defaultValue="0" />
        </fragment>
        
           <!--  other fragments-->
           
    </navigation>

внутри FragmentB

//all of these three methods return always the default value
val theIntFromBundle = requireArguments().getInt("theIntKey")

private val args: FragmentBArgs by navArgs()

requireActivity().intent.extras?.let {
    val args = FragmentBArgs.fromBundle(it)
}
...