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 } } 
  • Actividad de Kotlin no incluida en APK
  • ¿Cómo se testing el código que llama a funciones de nivel superior en Kotlin?
  • La reflexión del constructor de Java arroja una exception con classs selladas
  • kotlin obtiene vista desde el encabezado NavigationView
  • JaCoCo devuelve 0% de cobertura con Kotlin y Android 3.0
  • Obtenga un hilo extra de la actividad de Kotlin
  • Kotlin switch-statement con más de dos variables?
  • Error de traducción no detectada: com.android.dx.cf.code.SimException: local 0007: no válido
  • indexOf en Matrices de Kotlin
  • Android Kotlin DialogFragment (TimePicker)
  • Maneras de ofuscar el acceso a miembros de la class preferentemente privados, pero en realidad públicos, con el fin de utilizarlos en methods en línea