Bundle 通过使用安全的 Args 导航变得空
Bundle is getting null by using safe Args navigation
我正在尝试通过 java 使用 android x 的新导航功能,但我面临以下问题
我正在使用 Safe Args 将数据从一个目的地传递到另一个目的地,但我的捆绑包始终为空。我尝试了很多选择。
在没有 Safe Args 的情况下尝试传递参数,即使有 Safe 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>
您不应使用 savedInstanceState
来检索安全参数。而不是
String name = NameFragmentArgs.fromBundle(savedInstanceState).getNameArgument();
使用
String name = NameFragmentArgs.fromBundle(getArguments).getNameArgument();
此外,请注意 android:defaultValue="none"
将是字面值 "none"
的字符串。
我正在尝试通过 java 使用 android x 的新导航功能,但我面临以下问题
我正在使用 Safe Args 将数据从一个目的地传递到另一个目的地,但我的捆绑包始终为空。我尝试了很多选择。
在没有 Safe Args 的情况下尝试传递参数,即使有 Safe 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>
您不应使用 savedInstanceState
来检索安全参数。而不是
String name = NameFragmentArgs.fromBundle(savedInstanceState).getNameArgument();
使用
String name = NameFragmentArgs.fromBundle(getArguments).getNameArgument();
此外,请注意 android:defaultValue="none"
将是字面值 "none"
的字符串。