IllegalArgumentException:导航目标未知

时间:2020-06-27 08:08:30

标签: android navigation

我有FragmentA,DialogFragmentD和FragmentB:

<navigation     
android:id="@+id/activity_main"
app:startDestination="@id/fragmentA">
<fragment
    android:id="@+id/fragmentA"
    android:name="hexword.gate.test.view.FragmentA">
    <action
        android:id="@+id/action_fragmentA_to_dialogFragmentD"
        app:destination="@id/dialogFragmentD" />
    <action
        android:id="@+id/action_fragmentA_to_fragmentB"
        app:destination="@id/fragmentB" />
</fragment>
<dialog
    android:id="@+id/dialogFragmentD"
    android:name="hexword.gate.test.view.DialogFragmentD">
    <action
        android:id="@+id/action_dialogFragmentD_to_fragmentB"
        app:destination="@id/fragmentB" />
</dialog>
<fragment
    android:id="@+id/fragmentB"
    android:name="hexword.gate.test.view.FragmentB" />
FragmentA打开DialogFragmentD,当我单击DialogFragmentD中的按钮时,它关闭并且一些异步操作开始(在ViewModel中)。 FragmentA观察负责完成操作的LiveData,并导航到FragmentB。 如果异步操作比DialogFragmentD关闭快,那么当我调用navController.navigate(R.id.action_fragmentA_to_fragmentB)时,会收到IllegalArgumentException。 让我们处理一下:
        switch (navController.getCurrentDestination().getId()) {
        case R.id.dialogFragmentD:
            navController.navigate(R.id.action_dialogFragmentD_to_fragmentB);
            break;
        case R.id.fragmentA:
            navController.navigate(R.id.action_fragmentA_to_fragmentB);
            break;
        default:
            ...
    }

此检查是否是线程安全的? 在检查(.getCurrentDestination())之后和导航(.navigate())之前,目的地可以更改吗?

0 个答案:

没有答案