【问题标题】:IllegalArgumentException: Destination id == 0 can only be used in conjunction with a valid navOptions.popUpTo in NavControllerIllegalArgumentException: Destination id == 0 只能与 NavController 中的有效 navOptions.popUpTo 一起使用
【发布时间】:2021-12-14 12:36:21
【问题描述】:

在一个片段中,我使用上下文菜单中的 NavController,它有一个嵌套菜单。

如果我尝试导航到其中一个嵌套菜单项,则会出现以下错误:

java.lang.IllegalArgumentException: Destination id == 0 只能是 与有效的 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;
}

【问题讨论】:

    标签: android uinavigationcontroller


    【解决方案1】:

    您必须检查 menuId 是否为 0,这是因为您的嵌套菜单的根(“Liturgia de las Horas”)没有 ID,因此它将返回 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多