Tipo esperado no coincide con la expresión if en Kotlin

Me pregunto si alguien me puede ayudar a solucionar este problema con types no coincidentes dentro de la expresión if usando Kotlin.

Tengo 2 actividades para conectarme entre: La primera actividad es MainActivity.kt y la segunda actividad es Main2Activity.kt , dentro de la primera actividad MainActivity class un problema para los mismatched types , porque estoy usando if statement para elegir specific image para se convierta al specific adapter en la segunda actividad, como onclick en la image ( a ) para convertirla en la 2ª actividad con ADAPTER_TYPE_1 y la image ( b ) convertida en la 2ª actividad con ADAPTER_TYPE_2

Nota: el tipo de image es Int , mi primera image se llama a dentro de mi Drawable y la segunda image se llama b

Aquí hay una 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 } } } 

imagen de error

Aquí está la class de alimentos

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

No puede get la identificación de resources del dibujo disponible que agregó a la vista de image. Para especificar esto, puede usar la identificación o incluso mejor la label . En su caso, incluso tiene esta información con su entidad alimentaria y debería usarla aquí.

 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 } 

Intenta pensar en kotlin-way, es decir, intenta no usar types que aceptan nulos. También la comida de tu class está escrita en estilo java, pero se puede escribir en un estilo más simple: class Food(val name: String, val des: String, val image: Int)

Cuando anula los methods de Java a menudo, puede eliminar '?' del tipo de parámetro para tirar '!' en momentos futuros cuando requiera un tipo no nulo. La propiedad de la class var no es deseable porque proporciona el estado de que necesita observar que no ocurre nada en el time de ejecución.

Probablemente los consejos anteriores resolverán sus problemas. Si no, ¿puede dar más información sobre este error? (Por ejemplo, el número de línea de error)

  • ¿Hay alguna manera de abrir y cerrar una transmisión fácilmente en kotlin?
  • ¿Cómo selecciono qué sobrecarga de Java sobrescribir en una class derivada de Kotlin?
  • ¿Cómo crear una implementación anónima de una interfaz?
  • Método simulado que no devuelve el valor de la variable test-local
  • Los generics de Kotlin Array <T> dan como resultado "No se puede usar T como parámetro de tipo reificado. Usa una class en su lugar "pero List <T> no
  • ¿Cómo declarar un iterador sin inicializarlo? (Kotlin)
  • ¿Usando rasgos con classs de datos en Kotlin?
  • Cómo comparar el time de inactividad de MotionEvent con un reloj, ¿cuál es su base de time?
  • ¿Cómo saltarse los models proguard utilizados por retrofit2 que está en el package base?
  • Cambiar la capacidad de anulación del parámetro de la function anulada en kotlin
  • Error: Gradle: org.jetbrains.kotlin.kapt3.diagnostic.KaptError: error durante el process de anotación