通过使用安全的Args导航,Bundle变为空

时间:2019-06-25 13:49:17

标签: java android androidx android-jetpack android-jetpack-navigation

我正在尝试通过使用Java使用android x的新导航功能,而我正面临以下问题

我正在使用安全Args从一个目的地传递另一个目的地的数据,但是我的捆绑包始终为空。我尝试了很多选择。

在没有安全Args的情况下尝试传递参数,甚至在有安全Args的情况下,我也遇到错误

// Passing an argument in fragment
nameBtn.setOnClickListener(v -> {
            AccountFragmentDirections.ToNameFragment direction =
                    AccountFragmentDirections.toNameFragment().setNameArgument(editName.getText().toString());
            Navigation.findNavController(v).navigate(direction);
        });


//Retriving the nameArgument from bundle
        String name  = NameFragmentArgs.fromBundle(savedInstanceState).getNameArgument();


<!-- Fragments in Navigation graph -->
    <fragment
        android:id="@+id/nameFragment"
        android:name="com.example.navigationdemo.NameFragment"
        android:label="fragment_name"
        tools:layout="@layout/fragment_name">

        <argument
            android:name="nameArgument"
            app:argType="string"
            app:nullable="true"
            android:defaultValue="none" />
    </fragment>

    <fragment
        android:id="@+id/accountFragment"
        android:name="com.example.navigationdemo.AccountFragment"
        android:label="fragment_account"
        tools:layout="@layout/fragment_account" >
        <action
            android:id="@+id/toNameFragment"
            app:destination="@id/nameFragment" />
    </fragment>

1 个答案:

答案 0 :(得分:1)

您不应使用savedInstanceState来获取安全的参数。代替

String name  = NameFragmentArgs.fromBundle(savedInstanceState).getNameArgument();

使用

String name  = NameFragmentArgs.fromBundle(getArguments).getNameArgument();

此外,请注意android:defaultValue="none"的字面意义为字符串,其值为"none"