代码之家  ›  专栏  ›  技术社区  ›  sarah

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

  •  0
  • sarah  · 技术社区  · 5 年前

    enter image description here

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

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

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

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

    所以我假设我可以在如下参数中设置可为空的数据类型 User?

    在阅读之后 here ,我设置了这样的参数来实现 用户?

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

    但问题是,当我把用户数据从登录片段发送到家中时,它说我有太多的参数

    implementation "androidx.navigation:navigation-fragment-ktx:2.3.0-alpha04"
        implementation "androidx.navigation:navigation-ui-ktx:2.3.0-alpha04"
    
    1 回复  |  直到 5 年前
        1
  •  0
  •   ianhanniballake    5 年前

    使用时 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 userData: UserData = null 在方法声明中) 使用最初尝试的语法:

    val home = AuthenticationFragmentDirections.actionGlobalHomeFragment(userData)
    Navigation.findNavController(view).navigate(home, navOptions)
    
    推荐文章