我正在尝试通过使用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>
答案 0 :(得分:1)
您不应使用savedInstanceState
来获取安全的参数。代替
String name = NameFragmentArgs.fromBundle(savedInstanceState).getNameArgument();
使用
String name = NameFragmentArgs.fromBundle(getArguments).getNameArgument();
此外,请注意android:defaultValue="none"
的字面意义为字符串,其值为"none"
。