导航组件:从全局操作传递参数会导致 NullPointerException

Navigation Components: Passing arguments from global actions results in NullPointerException

正在使用的库:导航组件(来自 android 本身)

我正在尝试通过全局操作将参数(带有安全参数)传递给 activity。 activity 通过单击导航抽屉中的项目启动(因此将其声明为全局操作)。因此,我不能简单地传递其他 class 的论点。

启动成功,但在尝试检索参数时出现 NullPointerException。

nav_graph.xml

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/nav_graph"
    app:startDestination="...">
...

   <activity
        android:id="@+id/myAct"
        android:name="com.example.client.MyActivity"
        android:label="MyActivity"
        tools:layout="@layout/activity_my">
        <argument
            android:name="util_bool"
            android:defaultValue="false"
            app:argType="boolean" />
    </activity>

    <!--Global action-->

    <action
        android:id="@+id/launch_util"
        app:destination="@id/myAct">
        <argument
            android:name="util_bool"
            android:defaultValue="true"
            app:argType="boolean" />
    </action>
</navigation>

MyActivity.java

  @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan_barcode);
        // This results in the NullPointerException:
        boolean utilBool = NavGraphDirections.launchUtil().getUtilBool();

    }

activity_main_drawer.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:showIn="navigation_view">
    <item android:title="....">
        <menu>
            <group android:checkableBehavior="single">

                <item
                    android:id="@+id/myAct"
                    android:icon="@drawable/start_icon"
                    android:menuCategory="secondary"
                    android:checkable="false"
                    android:title="Beginne" />

                ...
            </group>
        </menu>
    </item>

    <item android:title="....">
        <menu>
            <item
                ...
        </menu>
    </item>

</menu>

Directions classes 与 navigate() 一起使用。您想要使用为每个目的地生成的 Args class 来检索参数:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_scan_barcode);
    // Extract the arguments from the Intent's extras
    boolean utilBool = MyActivityArgs.fromBundle(getIntent().getExtras()).getUtilBool();

}