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)

  • ¿Cómo uso el object Kotlin por reflexión?
  • ¿Hay alguna reference para la complejidad del time de la biblioteca Kotlin Standard Collection?
  • ¿Cómo cambia el tamaño de 6 a 2 en Kotlin?
  • Maven-publish gradle plugin se salta la versión
  • Kotlin File en Native iOS Project con Kotlin / Native
  • Cómo representar múltiples types (types de unión) al apuntar a JavaScript
  • Combinación eficiente de map y filter contra stdlibs
  • ¿Hay alguna forma de iterar todos los campos de una class de datos sin usar la reflexión?
  • Falso positivo en Android lint check para LinkedHashMap.remove ()
  • Cómo usar el tipo recursivo en Kotlin
  • ¿Cómo se comstack el proyecto Java + Kotlin con Maven?