IllegalArgumentException:Destination id == 0 只能与 NavController 中的有效 navOptions.popUpTo 结合使用
IllegalArgumentException: Destination id == 0 can only be used in conjunction with a valid navOptions.popUpTo in NavController
在一个 Fragment 中,我使用上下文菜单中的 NavController,它有一个嵌套菜单。
如果我尝试导航到其中一个嵌套菜单项,则会出现以下错误:
java.lang.IllegalArgumentException: Destination id == 0 can only be
used in conjunction with a valid navOptions.popUpTo
如何避免此错误并导航到嵌套的目的地?
菜单
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:checkableBehavior="single"
android:title="file"
>
<item
android:id="@+id/nav_misa"
android:title="@string/lbl_misa_hoy" />
<item
android:id="@+id/nav_homilias"
android:title="@string/lbl_homilias_hoy" />
<item
android:id="@+id/nav_lecturas"
android:title="Lecturas" />
<item
android:id="@+id/nav_comentarios"
android:title="@string/lbl_comentarios_hoy" />
</group>
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_santo"
android:title="@string/lbl_santo_hoy" />
</group>
<item android:title="Liturgia de las Horas">
<menu>
<item
android:id="@+id/nav_mixto"
android:title="Oficio+Laudes" />
<item
android:id="@+id/nav_oficio"
android:title="Oficio" />
<item
android:id="@+id/nav_laudes"
android:title="Laudes" />
<item
android:id="@+id/nav_tercia"
android:title="Tercia" />
<item
android:id="@+id/nav_sexta"
android:title="Sexta" />
<item
android:id="@+id/nav_nona"
android:title="Nona" />
<item
android:id="@+id/nav_visperas"
android:title="Vísperas" />
<item
android:id="@+id/nav_completas"
android:title="Completas" />
</menu>
</item>
</menu>
导航代码
public boolean onContextItemSelected(MenuItem item) {
Bundle bundle = new Bundle();
bundle.putString("FECHA", mDate);
NavController navController = NavHostFragment.findNavController(this);
navController.navigate(item.getItemId(),bundle);
return true;
}
您必须检查 menuId 是否为 0,这是因为您的嵌套菜单的根目录(“Liturgia de las Horas”)没有 ID,因此它将 return 0
public boolean onContextItemSelected(MenuItem item) {
if (item.getItemId() == 0) {
return true;
}
Bundle bundle = new Bundle();
bundle.putString("FECHA", mDate);
NavController navController = NavHostFragment.findNavController(this);
navController.navigate(item.getItemId(),bundle);
return true;
}
在一个 Fragment 中,我使用上下文菜单中的 NavController,它有一个嵌套菜单。
如果我尝试导航到其中一个嵌套菜单项,则会出现以下错误:
java.lang.IllegalArgumentException: Destination id == 0 can only be used in conjunction with a valid navOptions.popUpTo
如何避免此错误并导航到嵌套的目的地?
菜单
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:checkableBehavior="single"
android:title="file"
>
<item
android:id="@+id/nav_misa"
android:title="@string/lbl_misa_hoy" />
<item
android:id="@+id/nav_homilias"
android:title="@string/lbl_homilias_hoy" />
<item
android:id="@+id/nav_lecturas"
android:title="Lecturas" />
<item
android:id="@+id/nav_comentarios"
android:title="@string/lbl_comentarios_hoy" />
</group>
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_santo"
android:title="@string/lbl_santo_hoy" />
</group>
<item android:title="Liturgia de las Horas">
<menu>
<item
android:id="@+id/nav_mixto"
android:title="Oficio+Laudes" />
<item
android:id="@+id/nav_oficio"
android:title="Oficio" />
<item
android:id="@+id/nav_laudes"
android:title="Laudes" />
<item
android:id="@+id/nav_tercia"
android:title="Tercia" />
<item
android:id="@+id/nav_sexta"
android:title="Sexta" />
<item
android:id="@+id/nav_nona"
android:title="Nona" />
<item
android:id="@+id/nav_visperas"
android:title="Vísperas" />
<item
android:id="@+id/nav_completas"
android:title="Completas" />
</menu>
</item>
</menu>
导航代码
public boolean onContextItemSelected(MenuItem item) {
Bundle bundle = new Bundle();
bundle.putString("FECHA", mDate);
NavController navController = NavHostFragment.findNavController(this);
navController.navigate(item.getItemId(),bundle);
return true;
}
您必须检查 menuId 是否为 0,这是因为您的嵌套菜单的根目录(“Liturgia de las Horas”)没有 ID,因此它将 return 0
public boolean onContextItemSelected(MenuItem item) {
if (item.getItemId() == 0) {
return true;
}
Bundle bundle = new Bundle();
bundle.putString("FECHA", mDate);
NavController navController = NavHostFragment.findNavController(this);
navController.navigate(item.getItemId(),bundle);
return true;
}