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 .

  • Extensiones de Kotlin para Android y fragments retenidos
  • ¿Por qué no está funcionando kotlin en el estudio andriod con la installation del complemento kotlin?
  • UNRESOLVED_REFERENCE en widget (TextView) resuelto al elemento error en android-kotlin
  • ¿Insertar o agregar un elemento en ArrayList en Kotlin?
  • La variable de vista de Kotlin es inesperadamente nula en el método Activity onCreate
  • Anulación accidental: las siguientes declaraciones tienen la misma firma de JVM
  • Hacer clic en una vista de text para cambiar el fragment
  • La interoperabilidad Varargs Kotlin Java no funciona correctamente
  • Comprobación de conectividad no funciona en Android Oreo Kotlin
  • Base de datos de android de Kotlin: no se puede convertir java.lang.String en android.database.Cursor
  • Cómo usar fragments con kotlin