El button onClick no tiene atributo si la actividad está escrita en Kotlin

Siga este tutorial: Android – Inicie otra actividad si hice el button MainActivity.java atributo OnClick tiene el método sendMessage() .

Pero si hice el button MainActivity.kt atributo OnClick tiene que mostrarse. solo none .

¿Es esto un error de Android Studio 3 o me perdí algo por Kotlin?

Java mainActivity:

 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** Called when the user taps the Send button */ public void sendMessage(View view) { // Do something in response to button } } 

Kotlin mainActivity:

 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } /** Called when the user taps the Send button */ fun sendMessage(view: View) { // Do something in response to button } } 

Atributo OnClick

layout xml (los proyectos de Java y Kotlin son los mismos)

  <?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="ir.bigbang.vahid.myapplication.MainActivity"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" tools:layout_editor_absoluteX="148dp" tools:layout_editor_absoluteY="81dp" /> </android.support.constraint.ConstraintLayout> 

Parece que el diseñador aún no es compatible con Kotlin. Aquí hay alguna solución:

XML (no recomendado)

Agregue la siguiente línea a su label de Button . Esto es exactamente lo que hará el diseñador.

 android:onClick="sendMessage" 

Pasado de moda

No es necesario agregar nada.

 val button = findViewById<Button>(R.id.Button) button.setOnClickListener { } 

extensiones kotlin-android (recomendado)

Agregue el apply plugin: "kotlin-android-extensions" a su build.gradle

 // button is the Button id button.setOnClickListener { } 

Puedes definir esto fácilmente dentro del XML mismo. Pero usar el atributo android:onClick sigue siendo un poco caro.

En su lugar, podría considerar usar las extensiones de Kotlin para Android y las properties sintéticas:

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button.setOnClickListener { // Do something in response to button } } 
  • Error al intentar crear una instancia de una class Kotlin de Java
  • No se pueden agregar los fragments usando la function de Extensión de Kotlin
  • Kotlin - extraer la list de objects padre de los elementos en la Colección
  • Reduce on Range throws NoClassDefFoundError: kotlin / IntIterator
  • ¿Cómo configuro un ícono (dibujable) para un button en anko?
  • Kotlin: Convertir list grande a sublist de tamaño de partición establecido
  • Kotlin: "val someVar = if (xx) 1 else 1.0", ¿por qué someVar es "Any"?
  • Kotlin - Dagger 2 no está inyectando objects
  • kotlin - conversión automática de types numéricos
  • funciones nombradas vs reflexión lambda
  • No se puede conseguir que las classs de Kotlin en el proyecto Java maven funcionen (Eclipse)