我有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())之前,目的地可以更改吗?