gpt4 book ai didi

android - 我可以使用 safeargs 将可空数据类型作为参数发送吗?如果不是我该怎么办?

转载 作者:行者123 更新时间:2023-12-05 00:08:46 24 4
gpt4 key购买 nike

假设我有 2 个 fragment 。登录和主页。我将 Home fragment 设置为以 userData 作为参数的全局目标

enter image description here

如果用户还没有登录,那么它将从登录 fragment 开始。登录并从服务器获取用户数据后,它将导航到主页并使用此代码传递用户数据

 val home = AuthenticationFragmentDirections.actionGlobalHomeFragment(userData)
Navigation.findNavController(view).navigate(home, navOptions)

但问题是当用户已经登录并打开应用程序时。在这种情况下,他们将直接打开主页 fragment 。我的应用因错误而崩溃

java.lang.IllegalArgumentException: Required argument "userData" is missing and does not have an android:defaultValue

所以我假设我可以在像 User? 这样的参数中设置可为 null 的数据类型,因此如果 Home fragment 不是来自 Login,则它不需要 userData

阅读自 here 后, 我这样设置参数来实现 User?

<argument
android:name="userData"
android:defaultValue="@null"
app:argType="User"
app:nullable="true" />

但问题是,它说我把用户数据从登录 fragment 发送到家里时参数太多

我在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 - 我可以使用 safeargs 将可空数据类型作为参数发送吗?如果不是我该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60807867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com