“by navArgs<ScoreFragmentArgs>()”与“ScoreFragmentArgs.fromBundle(arguments!!)”有什么区别

cha*_*nae 4 android kotlin android-jetpack android-jetpack-navigation

val scoreFragmentArgs1 by navArgs<ScoreFragmentArgs>() 

val scoreFragmentArgs2 = ScoreFragmentArgs.fromBundle(arguments!!)
Run Code Online (Sandbox Code Playgroud)

我可以使用上述任何语句访问从前一个片段传递的参数。有人可以解释它们的区别以及何时使用它们。提前致谢

zsm*_*b13 6

第二个调用更简单。每当该行运行时,都会急切地评估该行,因此它将要求arguments捆绑包已经就位,并包含您希望在其中的所有键。


第一种方法给你一个延迟创建的Args实例,它只会在你第一次尝试读取它的值时被初始化。因此在类级别声明它是安全的。有关navArgs所有详细信息,请参阅文档。最重要的部分:

强烈建议仅在 Activityandroidx.navigation.NavController.navigate使用相应的androidx.navigation.NavDirections对象启动时使用此方法,以确保存在所需的参数。

只有在Activity附加到应用程序后才能访问此属性,在此之前访问将导致IllegalStateException.