我可以使用safeargs发送可为空的数据类型作为参数吗?如果没有,我该怎么办?

问题描述 投票:0回答:1

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

enter image description here

如果用户尚未登录,则将从登录片段开始。登录并从服务器获取userData之后,它将导航到Home并使用此代码传递userData]

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

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

java.lang.IllegalArgumentException:必需参数“ userData”为缺少并且没有android:defaultValue

所以我假设我可以在User?之类的参数中设置可为空的数据类型,因此,如果Home片段不是来自Login的,则Home片段就不需要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"

说我有2个片段。登录和主页。如果用户尚未登录,则将Home片段设置为以userData作为参数的全局目标,它将从登录片段开始。之后...

android android-architecture-components android-navigation android-architecture-navigation android-jetpack-navigation
1个回答
0
投票

[使用apply plugin: "androidx.navigation.safeargs"时,仅将必需的参数传递给actionGlobalHomeFragment()方法-具有默认值(即不需要的参数)与生成的set方法一起传递:

val home = AuthenticationFragmentDirections.actionGlobalHomeFragment()
    .setUserData(userData)
Navigation.findNavController(view).navigate(home, navOptions)
© www.soinside.com 2019 - 2024. All rights reserved.