如果活动写在Kotlin中,Button onClick属性是none

按照这个教程: Android的 – 开始另一个活动,如果我做了MainActivity.java按钮OnClick属性有sendMessage()方法。

但是,如果我做了MainActivity.kt按钮OnClick属性已经注意到显示。 只是一个none

这是一个Android Studio 3的错误,或者我错过了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 } } 

OnClick属性

布局xml(Java和Kotlin项目是一样的)

    

似乎设计师还不支持Kotlin。 这里有一些解决方案:

XML(不推荐)

将以下行添加到Button标签。 这正是设计师所要做的。

 android:onClick="sendMessage" 

旧的时尚

不需要添加任何东西。

 val button = findViewById 

kotlin-android-extensions(推荐)

添加apply plugin: "kotlin-android-extensions"到你的build.gradle

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

你可以很容易地在XML内部定义这个。 但是使用android:onClick属性还是有点贵的。

相反,您可以考虑使用Kotlin Android扩展和综合属性:

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