在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()突出显示粉红色的颜色。当我悬停在conView.tag = binding与我的鼠标弹出式消息智能转换到android.view.View! 。 当我把鼠标悬停在binding = conView.tag ,会弹出一个消息智能转换为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中的分号不是必需的,请注意