Kotlin sintético en adaptador o ViewHolder

Soy nuevo en kotlin. He encontrado e intentado utilizar el método sintético en lugar del molesto método findViewById en mi class Activity , pero he encontrado "Si queremos llamar a las properties sintéticas en View (útil en las classs de adaptadores), también deberíamos importar kotlinx.android.synthetic .vista principal.*." Pero no puedo entender cómo funciona exactamente? ¿Hay algún ejemplo?

Ejemplo simple de https://github.com/antoniolg/Kotlin-for-Android-Developers

 import kotlinx.android.synthetic.item_forecast.view.* class ForecastListAdapter() : RecyclerView.Adapter<ForecastListAdapter.ViewHolder>() { class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { fun bindForecast(forecast: Forecast) { itemView.date.text = forecast.date.toDateString() } } } 

No es necesario escribir

 val view = itemView.findViewById(R.id.date) as TextView view.text = forecast.date.toDateString() 

Sólo

 itemView.date.text = forecast.date.toDateString() 

Simple y efectivo!

Kotling 1.1.4 fuera

Más información: https://antonioleiva.com/kotlin-android-extensions/

Por lo tanto, debe habilitarlos agregándole esto a build.gradle:

 apply plugin: 'org.jetbrains.kotlin.android.extensions' androidExtensions { experimental = true } 

Desde esta nueva versión de Kotlin, las extensiones de Android han incorporado algunas características nuevas e interesantes: cachings en cualquier class (que curiosamente incluye ViewHolder)

Utilizándolo en un ViewHolder (o cualquier class personalizada)

 class ViewHolder(override val containerView: View) : RecyclerView.ViewHolder(containerView), LayoutContainer { fun bind(title: String) { itemTitle.text = "Hello Kotlin!" } } 

Necesitas

 import kotlinx.android.synthetic.row_wall.view.* 

Y luego algo parecido a:

 convertView.titleText.text = item.title 

El punto es que la vista. * Introduce extensiones a la class View.

Significa que debe colocar esta línea al comienzo de su file fuente:

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

Así que ahora, en lugar de, por ejemplo, findView(R.id.textView) as TextView , escribirías solo textView . Este último es una propiedad de extensión sintética ubicada en el package kotlinx.android.synthetic.main.view , por eso tiene que importar todo desde allí.

Hay un tutorial en el sitio oficial , eche un vistazo.

  • Dagger2 inyecta un presentador en un error de actividad de Kotlin
  • Tipo de interferencia fallida. No coinciden los types esperados: requiere un par de cadenas encontrado <String, String> en Kotlin y Anko
  • Ejecuta a lo mismo que a? .run en kotlin
  • "Las proyecciones no están permitidas para los arguments inmediatos de un supertipo" Kotlin Android Studio
  • La extensión sintética de Kotlin y varias incluyen el mismo layout
  • OnClick y TextView en Android Studio 3
  • Fondo de relleno de Android AlertDialog
  • Compara una vista de text con una string en Kotlin
  • El conflicto de las properties sintéticas de Kotlin
  • No se pudo encontrar la class 'kotlin.jvm.internal.DefaultConstructorMarker'
  • extracción de resources de string para kotlin en android studio?