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

Интересно, может ли кто-нибудь помочь мне исправить эту проблему с несогласованными типами внутри выражения 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 нежелательно, поскольку оно дает указание, что вам нужно следить за тем, чтобы во время выполнения ничего не происходило.

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

Intereting Posts
Kotlin – ключевое слово «in» – для чего используется? При использовании сопрограмм kotlin, как я могу тестировать функцию, вызывающую функцию приостановки? Обработчик аннотации Kotlin-Kapt не работает с maven ViewPager показывает Textviews из первого фрагмента Gradle не может разрешать ссылки с другого модуля Делегирование недвижимости, измененное изменчивой картой Значение Kotlin не может быть нулевым? java.lang.AbstractMethodError: абстрактный метод при запуске espresso на Kotlin с Mockito foreach в kotlin Как реорганизовать представление, чтобы разрешить фильтрацию элементов, привязанных к наблюдаемомуArrayList, внутри приложения tornadofx Как «добавить» символ в строку в Котлин Издеваются методы Kotlin с Java + Mockito Как получить доступ и передать параметры модулям Android Instant App Явное наследование от Any в Kotlin – Can и как это делается? Невозможно создать новый проект, используя генератор-генератор Gradle + Kotlin