期望的类型与kotlin中的if表达不匹配

我想知道是否有人可以帮助我解决这个问题与错误的类型内的if表达式使用Kotlin?

我有2个活动之间的连接:第一个活动是MainActivity.kt和第二个活动是Main2Activity.kt ,在第一个活动MainActivity class我有一个问题的mismatched types ,因为我使用if语句来选择specific image在第二个活动中转换为specific adapter ,比如点击图片( a ),将ADAPTER_TYPE_1转换为第二个活动,将图片( b )转换为ADAPTER_TYPE_2的第二个活动

注意:图像类型是Int ,我的第一个图像名为a在我的Drawable里面,第二个图像名为b

这是一个MainActivity.kt

 class MainActivity : AppCompatActivity() { var adapter:FoodAdapter?=null var listOfFoods =ArrayList<Food>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(layout.activity_main) // load foods listOfFoods.add(Food("Coffee"," Coffee preparation is", a)) listOfFoods.add(Food("Coffee"," Coffee preparation is", b)) adapter= FoodAdapter(this,listOfFoods) gvListFood.adapter =adapter } class FoodAdapter: BaseAdapter { var listOfFood= ArrayList<Food>() var context: Context?=null constructor(context:Context,listOfFood:ArrayList<Food>):super(){ this.context=context this.listOfFood=listOfFood } override fun getView(p0: Int, foodView: View?, p2: ViewGroup?): View? { val food = this.listOfFood[p0] var inflator = context?.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater var foodView= inflator.inflate(layout.food_ticket, null) foodView.ivFoodImage.setImageResource(food.image) foodView.ivFoodImage.setOnClickListener { val intent = Intent(context, Main2Activity::class.java) if (foodView.ivFoodImage == a){ intent.putExtra(Main2Activity.EXTRA_ADAPTER_MODE, AdapterType.ADAPTER_TYPE_1.ordinal) intent.putExtra("name", food.name) intent.putExtra("des", food.des) intent.putExtra("image", food.image) context!!.startActivity(intent) } if (foodView.ivFoodImage == b) { intent.putExtra(Main2Activity.EXTRA_ADAPTER_MODE, AdapterType.ADAPTER_TYPE_2.ordinal) intent.putExtra("name", food.name) intent.putExtra("des", food.des) intent.putExtra("image", food.image) context!!.startActivity(intent) } } return foodView } override fun getItem(p0: Int): Any { return listOfFood[p0] } override fun getItemId(p0: Int): Long { return p0.toLong() } override fun getCount(): Int { return listOfFood.size } } } 

错误图像

这是食物类

  class Food(val name: String, val des: String, val image: Int) 

您无法获取添加到图像视图中的绘图的资源ID。 为了指定这个,你可以使用id或甚至更好的标签 。 在你的情况下,你甚至有这个信息与你的食物实体,应该在这里使用它。

 class FoodAdapter( val context: Context, val listOfFood: ArrayList<Food> ): BaseAdapter { override fun getView(p0: Int, foodView: View?, p2: ViewGroup?): View? { val food = this.listOfFood[p0] val inflator = context?.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater return inflator.inflate(layout.food_ticket, null).also { it.ivFoodImage.imageResource = food.image it.ivFoodImage.setOnClickListener { view -> context.startActivity(Intent(context, Main2Activity::class.java) .putExtra("name", food.name) .putExtra("des", food.des) .putExtra("image", food.image) .also { when (food.image) { a -> it.putExtra(Main2Activity.EXTRA_ADAPTER_MODE, AdapterType.ADAPTER_TYPE_1.ordinal) b -> it.putExtra(Main2Activity.EXTRA_ADAPTER_MODE, AdapterType.ADAPTER_TYPE_2.ordinal) else -> it } }) } } } override fun getItem(p0: Int) = listOfFood[p0] override fun getItemId(p0: Int) = p0.toLong() override fun getCount() = listOfFood.size } 

尝试以kotlin的方式思考,即尝试不使用可为空的类型。 另外你的类用java风格编写的食物,但它可以写成更简单的风格: class Food(val name: String, val des: String, val image: Int)

当你经常重写java方法时,你可以删除'?' 从参数类型为了扔掉'!!' 在未来的时候需要非空类型。 var类属性是不可取的,因为它给出了状态,你需要注意在运行时没有任何反应。

上面的提示可能会解决您的问题。 如果不是,你能给出更多关于这个错误的信息吗?(例如错误的行号)