El conflicto de las properties sintéticas de Kotlin

Soy nuevo en Kotlin. Entre otras cosas muy interesantes, encontré las extensiones de Android que, de acuerdo con la documentation , deberían permitirme usar las vistas de las actividades sin la necesidad de findViewById .

En realidad, funciona muy bien al agregar solo esta línea en mis importaciones:

 import kotlinx.android.synthetic.main.<layout>.* 

El problema es cuando dos layouts diferentes contienen un widget con la misma identificación (es decir, el mismo nombre para la propiedad sintética),
por ejemplo, dos TextView diferentes con el ID txtTitle . Digamos que el primero está en una actividad y el segundo pertenece al layout utilizado dentro de un adaptador.

Cuando bash llamar a un método en el primer TextView (el de la actividad) no puedo ver el resultado esperado, como si la llamada se realizara en otra vista. Como confirmación de esto, cuando llamo a txtTitle.parent , veo el padre y los hermanos del otro txtTitle lugar de los esperados.

¿Estoy haciendo algo mal? La única forma en que descubrí que eludir este problema es utilizar nombres diferentes en todos mis layouts o continuar usando findViewById , pero sería una pena desperdiciar esta function de idioma …

La documentation de Kotlin sobre las importaciones dice

Si hay un choque de nombre, podemos eliminar la ambigüedad utilizando as palabra key para cambiar el nombre de la entidad que está en conflicto localmente

Por lo tanto, podría intentar importar los layouts con diferentes alias:

 import kotlinx.android.synthetic.main.<layoutActivity>.* as lActivity import kotlinx.android.synthetic.main.<layoutView>.* as lView 

Y use las textviews con el calificador correspondiente: lActivity.txtTitle y lView.txtTitle

Otra posible solución a su problema es importar uno y omitir el otro, asumiendo que todos los ID que necesita están presentes en ese.

Al final del día, identificaciones similares apuntan a lo mismo, y realmente no importa si se importó desde un layout u otro.

Espero que ayude

Puede intentar a continuación que TextView tenga la misma ID de layout diferente.

 import kotlinx.android.synthetic.main.activity_main.text_hello as lActivity import kotlinx.android.synthetic.main.extra_layout.text_hello as lView 

use lActivity.text = "Some text" para TextView from activity_main y lView.text = "Some text" para TextView from extra_layout .

  • El tipo Out-Projected 'ArrayList <*>' prohíbe el uso de 'public fun fun add (índice: Int, elemento: E): Unidad definida en java.util.ArrayList'
  • La igualdad de identidad para los arguments de los types Int e Int está en desuso
  • ¿Cuál es la forma correcta de declarar el tipo de variable en Android con Kotlin?
  • Compara una vista de text con una string en Kotlin
  • Extensiones de Kotlin / properties sintéticas: mismo object en múltiples invocaciones de Fragment.onViewCreated ()
  • extracción de resources de string para kotlin en android studio?
  • Kotlin, Java, multidex, Dagger 2, Butterknife y Realm: transformClassesWithJarMergingForDebug: input duplicada: org / jetbrains / annotations / NotNull.class
  • Comprobación de conectividad no funciona en Android Oreo Kotlin
  • Por qué los numbers que aceptan nulos no son para preservar la identidad
  • "Las proyecciones no están permitidas para los arguments inmediatos de un supertipo" Kotlin Android Studio
  • La variable de vista de Kotlin es inesperadamente nula en el método Activity onCreate