Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法访问片段参数中的Parcelable(错误:';参数';是可变属性)_Android_Android Fragments_Kotlin - Fatal编程技术网

Android 无法访问片段参数中的Parcelable(错误:';参数';是可变属性)

Android 无法访问片段参数中的Parcelable(错误:';参数';是可变属性),android,android-fragments,kotlin,Android,Android Fragments,Kotlin,如何使用kotlin正确访问片段中的参数 这就是我想要实现的目标: override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if(arguments!=null){ detail = Parcels.unwrap(arguments.getParcelable(DETAIL_KEY)) } } 但是编译器正确地抱怨了这个错误: 错误:无法对“Bundle”

如何使用kotlin正确访问片段中的参数

这就是我想要实现的目标:

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  if(arguments!=null){
    detail = Parcels.unwrap(arguments.getParcelable(DETAIL_KEY))
  }
}
但是编译器正确地抱怨了这个错误:

错误:无法对“Bundle”进行智能转换,因为“arguments”是一个可变属性,此时可能已更改

我想知道:除了使用
,还有什么优雅的方法来处理这个问题吗操作员


提前谢谢。

原来我很笨,我可以做:

detail = Parcels.unwrap(arguments?.getParcelable(DETAIL_KEY))

编译器没有任何抱怨。

结果证明我很愚蠢,我可以做:

detail = Parcels.unwrap(arguments?.getParcelable(DETAIL_KEY))
val arguments = arguments
detail = arguments?.let { args -> Parcels.unwrap(args.getParcelable(DETAIL_KEY)) }

编译器没有任何抱怨。

是的,这确实有效。(即使问题更新了)但我不喜欢仅仅为了声明
val
(尤其是使用相同的名称)而这样做。这是常见的做法吗?我经常这样做,令人惊讶。事实上,我刚想到我们可以使用
it
来避免赋值,就像这样:
参数?让{detail=Parcels.unwrap(it.getParcelable(detail_KEY))}
没错。尽管我更喜欢将其命名为其他名称,例如
args
。如果在
if(!=null
语句中使用args,则需要
val
赋值是的,这确实有效。(即使问题已更新),但我不喜欢声明
val
(尤其是使用相同的名称)只是这样做。这是常见的做法吗?我经常这样做,令人惊讶。事实上,我刚想到我们可以使用
it
来避免赋值,就像这样:
参数?.let{detail=Parcels.unwrap(it.getParcelable(detail_KEY))}
没错。尽管我更喜欢将其命名为其他名称,例如
args
。如果在
if(!=null
语句中使用args,则需要
val
赋值
val arguments = arguments
detail = arguments?.let { args -> Parcels.unwrap(args.getParcelable(DETAIL_KEY)) }