Атрибут Button onClick не имеет значения, если активность написана в Котлине

Следуйте этому руководству: Android – начните еще одно действие, если я сделал MainActivity.java OnClick Атрибут OnClick имеет метод sendMessage() .

Но если бы я MainActivity.kt , OnClick атрибут MainActivity.kt OnClick показывается. просто none .

Это ошибка Android Studio 3, или я что-то пропустил для Котлина?

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 } } 

Атрибут OnClick

layout xml (проект Java и Kotlin одинаковый)

  <?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> 

Похоже, дизайнер еще не поддерживает Котлина. Вот несколько решений:

XML (не рекомендуется)

Добавьте в свой тег Button следующую строку. Это именно то, что сделает дизайнер.

 android:onClick="sendMessage" 

Старая мода

Не нужно ничего добавлять.

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

kotlin-андроид-расширения (рекомендуется)

Добавить apply plugin: "kotlin-android-extensions" в ваш build.gradle

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

Вы можете легко определить это внутри самого XML. Но использование атрибута android:onClick все еще немного дорого.

Вместо этого вы можете рассмотреть возможность использования Kotlin Android Extensions и синтетических свойств:

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button.setOnClickListener { // Do something in response to button } }