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 ...
- "Cambiar el nombre": en uno de sus diseños, cambie ivFoodImage por algo más como
ivFoodImage_Details
. - "Eliminar la importación no utilizada": se explica por sí mismo y es una buena práctica.
- "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 desdefood_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)