我可以使用 safeargs 将可空数据类型作为参数发送吗?如果不是我该怎么办?
can I send nullable data type as argument using safeargs ? if not what should I do?
-
android
-
android-navigation
-
android-architecture-components
-
android-architecture-navigation
-
android-jetpack-navigation
假设我有 2 个片段。登录和主页。我将 Home 片段设置为以 userData 作为参数的全局目标 [=18=]
如果用户还没有登录,那么它将从登录片段开始。登录并从服务器获取用户数据后,它将导航到主页并使用此代码传递用户数据
val home = AuthenticationFragmentDirections.actionGlobalHomeFragment(userData)
Navigation.findNavController(view).navigate(home, navOptions)
但问题是当用户已经登录并打开应用程序时。在这种情况下,他们将直接打开主页片段。我的应用因错误而崩溃
java.lang.IllegalArgumentException: Required argument "userData" is
missing and does not have an android:defaultValue
所以我假设我可以在像 User?
这样的参数中设置可为 null 的数据类型,因此如果 Home 片段不是来自 Login
,则它不需要 userData
读完here后,我这样设置参数来实现User?
<argument
android:name="userData"
android:defaultValue="@null"
app:argType="User"
app:nullable="true" />
但问题是,它说我把用户数据从登录片段发送到家时参数太多
我在gradle
中使用这个
implementation "androidx.navigation:navigation-fragment-ktx:2.3.0-alpha04"
implementation "androidx.navigation:navigation-ui-ktx:2.3.0-alpha04"
当使用 apply plugin: "androidx.navigation.safeargs"
时,只将必需的参数传递给 actionGlobalHomeFragment()
方法 - 具有默认值的参数(即不需要的参数)与生成的 set
方法:
val home = AuthenticationFragmentDirections.actionGlobalHomeFragment()
.setUserData(userData)
Navigation.findNavController(view).navigate(home, navOptions)
如果您要通过应用 apply plugin: "androidx.navigation.safeargs.kotlin"
(注意 .kotlin
)切换到生成 Kotlin Safe Args 代码,则代码使用 Kotlin 默认参数(即,在 userData: UserData = null
方法声明),确实让您使用最初尝试的语法:
val home = AuthenticationFragmentDirections.actionGlobalHomeFragment(userData)
Navigation.findNavController(view).navigate(home, navOptions)
android
android-navigation
android-architecture-components
android-architecture-navigation
android-jetpack-navigation
假设我有 2 个片段。登录和主页。我将 Home 片段设置为以 userData 作为参数的全局目标 [=18=]
如果用户还没有登录,那么它将从登录片段开始。登录并从服务器获取用户数据后,它将导航到主页并使用此代码传递用户数据
val home = AuthenticationFragmentDirections.actionGlobalHomeFragment(userData)
Navigation.findNavController(view).navigate(home, navOptions)
但问题是当用户已经登录并打开应用程序时。在这种情况下,他们将直接打开主页片段。我的应用因错误而崩溃
java.lang.IllegalArgumentException: Required argument "userData" is missing and does not have an android:defaultValue
所以我假设我可以在像 User?
这样的参数中设置可为 null 的数据类型,因此如果 Home 片段不是来自 Login
读完here后,我这样设置参数来实现User?
<argument
android:name="userData"
android:defaultValue="@null"
app:argType="User"
app:nullable="true" />
但问题是,它说我把用户数据从登录片段发送到家时参数太多
我在gradle
中使用这个implementation "androidx.navigation:navigation-fragment-ktx:2.3.0-alpha04"
implementation "androidx.navigation:navigation-ui-ktx:2.3.0-alpha04"
当使用 apply plugin: "androidx.navigation.safeargs"
时,只将必需的参数传递给 actionGlobalHomeFragment()
方法 - 具有默认值的参数(即不需要的参数)与生成的 set
方法:
val home = AuthenticationFragmentDirections.actionGlobalHomeFragment()
.setUserData(userData)
Navigation.findNavController(view).navigate(home, navOptions)
如果您要通过应用 apply plugin: "androidx.navigation.safeargs.kotlin"
(注意 .kotlin
)切换到生成 Kotlin Safe Args 代码,则代码使用 Kotlin 默认参数(即,在 userData: UserData = null
方法声明),确实让您使用最初尝试的语法:
val home = AuthenticationFragmentDirections.actionGlobalHomeFragment(userData)
Navigation.findNavController(view).navigate(home, navOptions)