在 kotlin 中与平台类型进行智能转换
Smartcasting to and from platform type in kotlin
我正在使用 kotlin 创建我的适配器,它在 android 中扩展了 BaseAdapter
。下面是 getView
方法
中的代码
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? {
var binding : ImageBinding
var conView = convertView
if(conView == null){
binding = DataBindingUtil.inflate(LayoutInflater.from(parent?.context),
R.layout.image, parent, false)
conView = binding.root;
conView.tag = binding
}else {
binding = conView.getTag() as ImageBinding
}
return conView;
}
conView.tag = binding
和 binding = conView.getTag()
以粉红色突出显示 color.When 我将鼠标悬停在 conView.tag = binding
上,出现一个弹出消息 智能转换为 android.view.View!。当我将鼠标悬停在 binding = conView.tag
上时,会出现一个弹出窗口,其中包含一条消息 Smart cast to android.view.View。请注意这两条消息的区别,后者缺少平台类型符号 (!)
我如何实施这两个建议的选项?
因为 convertView
是可空类型变量 (View?
),var conView = convertView
赋值会创建可空 conView
变量的副本。因此,您应该将 conView
变量处理为可为空的。
尝试以下方式:
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? {
var binding : ImageBinding
convertView?.let {
binding = it.tag as ImageBinding
return it
}
binding = DataBindingUtil.inflate(LayoutInflater.from(parent?.context), R.layout.image, parent, false)
val conView = binding.root
conView.tag = binding
return conView
}
注意:Kotlin 中不需要分号,请注意
我正在使用 kotlin 创建我的适配器,它在 android 中扩展了 BaseAdapter
。下面是 getView
方法
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? {
var binding : ImageBinding
var conView = convertView
if(conView == null){
binding = DataBindingUtil.inflate(LayoutInflater.from(parent?.context),
R.layout.image, parent, false)
conView = binding.root;
conView.tag = binding
}else {
binding = conView.getTag() as ImageBinding
}
return conView;
}
conView.tag = binding
和 binding = conView.getTag()
以粉红色突出显示 color.When 我将鼠标悬停在 conView.tag = binding
上,出现一个弹出消息 智能转换为 android.view.View!。当我将鼠标悬停在 binding = conView.tag
上时,会出现一个弹出窗口,其中包含一条消息 Smart cast to android.view.View。请注意这两条消息的区别,后者缺少平台类型符号 (!)
我如何实施这两个建议的选项?
因为 convertView
是可空类型变量 (View?
),var conView = convertView
赋值会创建可空 conView
变量的副本。因此,您应该将 conView
变量处理为可为空的。
尝试以下方式:
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? {
var binding : ImageBinding
convertView?.let {
binding = it.tag as ImageBinding
return it
}
binding = DataBindingUtil.inflate(LayoutInflater.from(parent?.context), R.layout.image, parent, false)
val conView = binding.root
conView.tag = binding
return conView
}
注意:Kotlin 中不需要分号,请注意