无法导航到其他图形中的目标

时间:2019-12-05 05:06:58

标签: android android-architecture-navigation android-jetpack-navigation

在我们的代码中将Android导航组件与SAMF(单个活动,多个片段)方法一起使用以实现每个功能。假设每个功能都有自己的导航图,用于在它们之间进行导航。

例如,图形为 graph_a graph_b graph_c 并带有自己的片段,并按以下方式导航:

  graph_a >> graph_b >> graph_c

,它按预期工作。 现在,在某些情况下,Fragment(frag_b)可能需要在不同的导航图中导航另一个,例如

  frag_b(graph_b) >> frag_c(graph_a)

在这种情况下,我发现了最佳的解决方案,可以使用URI进行导航并在下面进行尝试。

  val deepLink = Uri.parse("app://login/user-signup")
  findNavController().navigate(deepLink)

并添加了以下 deeplink (在相应的图中称为片段)。

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/graph_login_flow"
    app:startDestination="@id/userSignInFragment">
    ...
    <fragment
        android:id="@+id/userSignUpFragment"
        android:name="com.app.login.ui.UserSignUpFragment"
        android:label="EmailSignUpFragment"
        tools:layout="@layout/fragment_user_sign_up">
        <action
            android:id="@+id/action_userSiUpFrag_to_emailVeriFrag"
            app:destination="@id/emailVerificationFragment" />
        <deepLink
            android:id="@+id/deepLink_to_userSignUpFragment"
            app:uri="app://login/user-signup" />
    </fragment>
    <include app:graph="@navigation/graph_home_flow" />
    ...
</navigation>

根据Android documentation,无论图形如何,都可以导航到任何目的地,但是我的尝试导致以下错误。 有没有更好的方法?

java.lang.IllegalArgumentException: navigation destination with deepLink app://login/user-signup is unknown to this NavController
    at androidx.navigation.NavController.navigate(NavController.java:916)
    at androidx.navigation.NavController.navigate(NavController.java:894)
    at androidx.navigation.NavController.navigate(NavController.java:880)
    at com.app.home.profile.ProfileFragment.onViewCreated(ProfileFragment.kt:82)
    at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:298)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1232)
    at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2390)
    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2125)
    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2081)
    at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1977)

0 个答案:

没有答案