“ by navArgs <ScoreFragmentArgs>()”和“ ScoreFragmentArgs.fromBundle(arguments !!)”之间有什么区别?

时间:2019-07-15 06:40:01

标签: android kotlin android-jetpack android-jetpack-navigation

val scoreFragmentArgs1 by navArgs<ScoreFragmentArgs>() 

val scoreFragmentArgs2 = ScoreFragmentArgs.fromBundle(arguments!!)

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

1 个答案:

答案 0 :(得分:3)

第二个电话比较简单。只要该行运行,便会对其进行热切的评估,因此这将需要arguments捆绑包已经准备就绪,并且包含您期望包含在其中的所有密钥。


第一种方法为您提供了一个延迟创建的Args实例,该实例仅在您首次尝试读取其值时才会初始化。因此,在类级别进行声明是安全的。有关所有详细信息,请参见文档中的navArgs。最重要的部分:

  

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

     

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