我正在尝试通过使用Java使用Android X的新导航功能,并且我面临以下问题
我正在使用安全的ARG来从一个目的地传递来自另一个目的地的数据,但我的捆绑包总是无效的。我尝试了很多选择。
尝试没有安全的ARG的参数通过,即使在安全的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
检索安全的args。而不是
String name = NameFragmentArgs.fromBundle(savedInstanceState).getNameArgument();
使用
String name = NameFragmentArgs.fromBundle(getArguments).getNameArgument();
另外,请注意android:defaultValue="none"
实际上是带有Value "none"
的字符串。