在 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 = bindingbinding = 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 中不需要分号,请注意