tutorial ktx framework extensions android xml android-layout kotlin

android - ktx - Error de ambigüedad de resolución de sobrecarga en kotlin



kotlin framework android (2)

Estás definiendo ivFoodImage en tus dos diseños. Y estas importando sus definiciones como asi ...

import kotlinx.android.synthetic.main.activity_food_details.view.* import kotlinx.android.synthetic.main.food_ticket.view.*

Considere cambiar el nombre en uno de los diseños, o ser explícito en la definición de foodView , o eliminar la importación con activity_food_details si no se está utilizando.

EDITAR

Para aclarar las posibles soluciones ...

  1. "Cambiar el nombre": en uno de sus diseños, cambie ivFoodImage por algo más como ivFoodImage_Details .
  2. "Eliminar la importación no utilizada": se explica por sí mismo y es una buena práctica.
  3. "siendo explícito": elimine la importación de la que desea que sea explícito y luego haga lo que está haciendo el OP, es decir, var foodView = inflator.inflate(R.layout.food_ticket,null) , cargando explícitamente desde food_ticket en este caso .

El concepto de usar el mismo nombre en múltiples diseños no es malo (piense en términos de interfaces e inyección). Pero el kotlinx.android.synthetic es un caramelo sintáctico para hacer las cosas menos detalladas. Se interpone en el camino de la meta aquí.

Aquí hay otra alternativa. Si está intentando que un diseño implemente una especie de "Interfaz", considere envolver cada diseño con su propia clase Kotlin y pida a la clase que implemente la interfaz. Esto puede volverse tedioso si tienes muchos de estos diseños, así que "elige tu veneno", esto es solo otra idea.

Por último, ver la respuesta de @Daniel Wilson. Evita el error del compilador y le hace especificar el espacio de nombres para el cual ivFoodImage desea usar.

¿Cómo soluciono este error de sobrecarga? Tengo un error de ambigüedad de resolución de sobrecarga, lo sincronizo en mi proyecto, lo limpio y lo reconstruyo, pero me aparece el error de abajo, agrego el código de actividad principal en kotlin con 2 actividades de diseño. el error

Aquí hay una actividad principal.

package com.hussein.startup import android.content.Context import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.BaseAdapter import kotlinx.android.synthetic.main.activity_food_details.view.* import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.food_ticket.view.* class MainActivity : AppCompatActivity() { var adapter:FoodAdapter?=null var listOfFoods =ArrayList<Food>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // load foods listOfFoods.add(Food("Coffee"," Coffee preparation is",R.drawable.a)) ..... 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, p1: View?, p2: ViewGroup?): View { val food = this.listOfFood[p0] var inflator = context!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater var foodView= inflator.inflate(R.layout.food_ticket,null) foodView.ivFoodImage.setImageResource(food.image!!) foodView.ivFoodImage.setOnClickListener { val intent = Intent(context,FoodDetails::class.java) intent.putExtra("name",food.name!!) intent.putExtra("des",food.des!!) intent.putExtra("image",food.image!!) context!!.startActivity(intent) } foodView.tvName.text = food.name!! 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 } } }

Aquí hay un diseño XML.

1-activity_food_details.xml

<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".FoodDetails"> <ImageView android:id="@+id/ivFoodImage" android:layout_width="50pt" android:layout_height="50pt" android:layout_marginTop="52dp" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/c" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp" app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="8dp" app:layout_constraintHorizontal_bias="0.501" /> <TextView android:id="@+id/tvName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:text="TextView" android:textColor="@color/colorPrimary" android:textSize="24sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.501" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="48dp" app:layout_constraintTop_toBottomOf="@+id/ivFoodImage" /> <TextView android:id="@+id/tvDetails" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="56dp" android:text="TextView" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvName" /> </android.support.constraint.ConstraintLayout>

2-food_ticket.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="63pt" android:layout_height="wrap_content" android:background="@color/gray" android:orientation="vertical" android:padding="3pt"> <LinearLayout android:gravity="center" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/background" android:orientation="vertical"> <ImageView android:id="@+id/ivFoodImage" android:layout_width="50pt" android:layout_height="50pt" app:srcCompat="@drawable/c" /> <TextView android:id="@+id/tvName" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="Coffe" android:textSize="20sp" /> </LinearLayout> </LinearLayout>


Haciendo referencia a esta respuesta , puede importar específicamente la ID que desee y asignarle un nombre usando la palabra clave de Kotlin

package XXX import kotlinx.android.synthetic.main.num_info_inet_plus_pack.view.circle as inetViewCircle import kotlinx.android.synthetic.main.num_info_pack.view as circle //... val inetView = activity.layoutInflater.inflate(R.layout.num_info_pack, parent, false) inetViewCircle.setBackgroundResource(background)