Ожидаемое несоответствие типа с выражением в Котлине

Интересно, может ли кто-нибудь помочь мне исправить эту проблему с несогласованными типами внутри выражения if, используя Kotlin?

У меня есть 2 действия для подключения между: первым действием является MainActivity.kt а второе – Main2Activity.kt , внутри первого действия. MainActivity class меня возникла проблема для mismatched types , потому что я использую оператор if для выбора specific image для быть преобразованным в specific adapter во втором действии, например, при щелчке по изображению ( a ), который должен быть преобразован во 2-ое действие с помощью ADAPTER_TYPE_1 и изображения ( b ), преобразованного во 2-ое действие с помощью ADAPTER_TYPE_2

Примечание: тип изображения – Int , мое первое изображение с именем внутри моего 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) 

Вы не можете получить идентификатор ресурса, который вы можете добавить в представление изображения. Для указания этого вы можете использовать идентификатор или даже лучше тег . В этом случае у вас даже есть эта информация с вашей пищевой организацией, и вы должны использовать ее здесь.

 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-way, т.е. старайтесь не использовать типы с нулевым значением. Также ваш класс Food написан в стиле java, но его можно написать более простым стилем: class Food(val name: String, val des: String, val image: Int)

Когда вы переопределяете java-методы, вы часто можете удалить '?' от типа параметра, чтобы выбросить «!!» в будущих моментах, когда требуется не-нулевой тип. Свойство var class нежелательно, поскольку оно дает указание, что вам нужно следить за тем, чтобы во время выполнения ничего не происходило.

Вероятно, подсказки выше помогут решить ваши проблемы. Если нет, можете ли вы предоставить дополнительную информацию об этой ошибке? (Например, номер строки ошибки)