Fixed
Status Update
Comments
il...@google.com <il...@google.com>
il...@google.com <il...@google.com> #2
As a workaround, your Fragment can set the arguments to an empty Bundle if it is null:
if (arguments == null) {
arguments = Bundle()
}
// Assuming myArgs is set via by navArgs()
val myArg = myArgs.myArg
if (arguments == null) {
arguments = Bundle()
}
// Assuming myArgs is set via by navArgs()
val myArg = myArgs.myArg
wk...@google.com <wk...@google.com>
wk...@google.com <wk...@google.com>
be...@google.com <be...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-master-dev
commit d8c9982a9cac54247134252eea8d8a4cbf757e74
Author: Ian Lake <ilake@google.com>
Date: Fri Mar 15 13:21:12 2019
Avoid sending a null Bundle when NavArguments are present
When using arguments with android:defaultValue="@null",
these attributes are dropped by XmlPullParser, so the
NavArgument does not have a default value set. Change
addInDefaultArgs() to always return a non-null Bundle
if there are NavArguments set at all to ensure that
Safe Args can correctly parse the empty Bundle and
fill in the correct default values.
This also simplifies the process if you're not using
Safe Args since you can requireArguments() and the
proper gets with your default values.
Test: new AddInDefaultArgsTest parameterized test
Fixes: 128531879
Change-Id: I6ec9673100790df03b5aa1d86f74dbec70173095
A navigation/common/src/androidTest/java/androidx/navigation/AddInDefaultArgsTest.kt
M navigation/common/src/main/java/androidx/navigation/NavDestination.java
https://android-review.googlesource.com/930456
https://goto.google.com/android-sha1/d8c9982a9cac54247134252eea8d8a4cbf757e74
Branch: androidx-master-dev
commit d8c9982a9cac54247134252eea8d8a4cbf757e74
Author: Ian Lake <ilake@google.com>
Date: Fri Mar 15 13:21:12 2019
Avoid sending a null Bundle when NavArguments are present
When using arguments with android:defaultValue="@null",
these attributes are dropped by XmlPullParser, so the
NavArgument does not have a default value set. Change
addInDefaultArgs() to always return a non-null Bundle
if there are NavArguments set at all to ensure that
Safe Args can correctly parse the empty Bundle and
fill in the correct default values.
This also simplifies the process if you're not using
Safe Args since you can requireArguments() and the
proper gets with your default values.
Test: new AddInDefaultArgsTest parameterized test
Fixes: 128531879
Change-Id: I6ec9673100790df03b5aa1d86f74dbec70173095
A navigation/common/src/androidTest/java/androidx/navigation/AddInDefaultArgsTest.kt
M navigation/common/src/main/java/androidx/navigation/NavDestination.java
il...@google.com <il...@google.com> #4
We've fixed this for Navigation 2.1.0-alpha01 at the library level, rather than only in Safe Args. Destinations with any argument will have a non-null Bundle.
il...@google.com <il...@google.com> #5
I'm still getting the error with "androidx.navigation:navigation-safe-args-gradle-plugin:2.1.0-alpha02"
<argument
android:name="filter"
android:defaultValue="@null"
app:nullable="true"
app:argType="***.ConsultationsFilter"
/>
---------
class TestFragment : androidx.fragment.app.Fragment() {
private val args by navArgs<TestFragment>()
...
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
....
val filter = args.filter // <-- throws null argument exception
}
<argument
android:name="filter"
android:defaultValue="@null"
app:nullable="true"
app:argType="***.ConsultationsFilter"
/>
---------
class TestFragment : androidx.fragment.app.Fragment() {
private val args by navArgs<TestFragment>()
...
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
....
val filter = args.filter // <-- throws null argument exception
}
Description
It would be great to have a well-defined, documented and supported way of passing data from a deep link URL to a destination as an argument, with type safety provided by safeargs.