setOnClickListener不适用于Android Kotlin中的按钮
我正在尝试使用kotlin为android构建一个简单的计算器应用程序。但是单击按钮时,setOnClickListener不适用于Android Kotlin中的按钮,android,android-layout,kotlin,Android,Android Layout,Kotlin,我正在尝试使用kotlin为android构建一个简单的计算器应用程序。但是单击按钮时,setOnClickListener不起作用 mainActivity.kt package com.example.calculator import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.view.View import androi
setOnClickListener
不起作用
mainActivity.kt
package com.example.calculator
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
import kotlin.math.log
class MainActivity : AppCompatActivity() {
private lateinit var result:EditText
private lateinit var newNumber:EditText
private lateinit var displayOperation:TextView
private var operand1:Double?=null
private var operand2:Double=0.0
private var pendingOperation ="="
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
result = findViewById(R.id.result)
newNumber=findViewById(R.id.newNumber)
displayOperation=findViewById(R.id.displayOperation)
val button0:Button = findViewById(R.id.button0)
val button1:Button = findViewById(R.id.button1)
val button2:Button = findViewById(R.id.button2)
val button3:Button = findViewById(R.id.button3)
val button5:Button = findViewById(R.id.button5)
val button6:Button = findViewById(R.id.button6)
val button4:Button = findViewById(R.id.button4)
val button7:Button = findViewById(R.id.button7)
val button8:Button = findViewById(R.id.button8)
val button9:Button = findViewById(R.id.button9)
val buttonDot:Button = findViewById(R.id.buttonDot)
val buttonEqual:Button = findViewById(R.id.buttonEqual)
val buttonAdd:Button = findViewById(R.id.buttonAdd)
val buttonSub:Button = findViewById(R.id.buttonSub)
val buttonMul:Button = findViewById(R.id.buttonMul)
val buttonDiv:Button = findViewById(R.id.buttonDiv)
val listener = View.OnClickListener { v->
val b = v as Button
newNumber.append(b.text)
}
button0.setOnClickListener { listener }
button1.setOnClickListener { listener }
button2.setOnClickListener { listener }
button3.setOnClickListener { listener }
button4.setOnClickListener { listener }
button5.setOnClickListener { listener }
button6.setOnClickListener { listener }
button7.setOnClickListener { listener }
button8.setOnClickListener { listener }
button9.setOnClickListener { listener }
buttonDot.setOnClickListener { listener }
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".MainActivity">
<Button
android:id="@+id/button0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:clickable="true"
android:minWidth="48dp"
android:text="0"
app:layout_constraintStart_toStartOf="@+id/button1"
app:layout_constraintTop_toBottomOf="@+id/button1" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:minWidth="48dp"
android:text="1"
app:layout_constraintStart_toStartOf="@+id/button4"
app:layout_constraintTop_toBottomOf="@+id/button4" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:minWidth="48dp"
android:text="2"
app:layout_constraintBaseline_toBaselineOf="@+id/button1"
app:layout_constraintStart_toEndOf="@+id/button1" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:minWidth="48dp"
android:text="3"
app:layout_constraintBaseline_toBaselineOf="@+id/button2"
app:layout_constraintStart_toEndOf="@+id/button2" />
<Button
android:id="@+id/button8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:minWidth="48dp"
android:text="8"
app:layout_constraintBaseline_toBaselineOf="@+id/button7"
app:layout_constraintStart_toEndOf="@+id/button7" />
<Button
android:id="@+id/button6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:minWidth="48dp"
android:text="6"
app:layout_constraintBaseline_toBaselineOf="@+id/button5"
app:layout_constraintStart_toEndOf="@+id/button5" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:minWidth="48dp"
android:text="4"
app:layout_constraintStart_toStartOf="@+id/button7"
app:layout_constraintTop_toBottomOf="@+id/button7" />
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:minWidth="48dp"
android:text="5"
app:layout_constraintBaseline_toBaselineOf="@+id/button4"
app:layout_constraintStart_toEndOf="@+id/button4" />
<Button
android:id="@+id/button7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:minWidth="48dp"
android:text="7"
app:layout_constraintStart_toStartOf="@+id/newNumber"
app:layout_constraintTop_toBottomOf="@+id/newNumber" />
<Button
android:id="@+id/button9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:minWidth="48dp"
android:text="9"
app:layout_constraintBaseline_toBaselineOf="@+id/button8"
app:layout_constraintStart_toEndOf="@+id/button8" />
<Button
android:id="@+id/buttonDot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:minWidth="48dp"
android:text="."
app:layout_constraintBaseline_toBaselineOf="@+id/button0"
app:layout_constraintStart_toEndOf="@+id/button0" />
<Button
android:id="@+id/buttonEqual"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:minWidth="48dp"
android:text="="
app:layout_constraintBaseline_toBaselineOf="@+id/buttonDot"
app:layout_constraintStart_toEndOf="@+id/buttonDot" />
<Button
android:id="@+id/buttonAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:minWidth="48dp"
android:text="+"
app:layout_constraintBaseline_toBaselineOf="@+id/buttonEqual"
app:layout_constraintStart_toEndOf="@+id/buttonEqual" />
<Button
android:id="@+id/buttonDiv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:minWidth="48dp"
android:text="/"
app:layout_constraintBaseline_toBaselineOf="@+id/button9"
app:layout_constraintStart_toEndOf="@+id/button9" />
<Button
android:id="@+id/buttonMul"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:minWidth="48dp"
android:text="*"
app:layout_constraintBaseline_toBaselineOf="@+id/button6"
app:layout_constraintStart_toEndOf="@+id/button6" />
<Button
android:id="@+id/buttonSub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:minWidth="48dp"
android:text="-"
app:layout_constraintBaseline_toBaselineOf="@+id/button3"
app:layout_constraintStart_toEndOf="@+id/button3" />
<TextView
android:id="@+id/displayOperation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintBaseline_toBaselineOf="@+id/newNumber"
app:layout_constraintEnd_toStartOf="@+id/newNumber"
app:layout_constraintStart_toStartOf="parent" />
<EditText
android:id="@+id/result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:ems="10"
android:focusable="false"
android:focusableInTouchMode="false"
android:inputType="numberSigned|numberDecimal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/newNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:ems="10"
android:inputType="numberSigned|text|numberDecimal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/result" />
</androidx.constraintlayout.widget.ConstraintLayout>
首先,您不需要在Kotlin中使用findViewById。您可以使用xml中提供的id直接使用它
这是因为您没有为按钮设置任何侦听器,而是定义了不调用任何方法的新侦听器 这将起作用:
button.setOnClickListener(listener)
button.setOnClickListener{ listener.onClick(it) }
这也可以,但这里有两个侦听器:由另一个调用的原始侦听器:
button.setOnClickListener(listener)
button.setOnClickListener{ listener.onClick(it) }
这是因为您没有为按钮设置任何侦听器,而是定义了不调用任何方法的新侦听器 这将起作用:
button.setOnClickListener(listener)
button.setOnClickListener{ listener.onClick(it) }
这也可以,但这里有两个侦听器:由另一个调用的原始侦听器:
button.setOnClickListener(listener)
button.setOnClickListener{ listener.onClick(it) }
如果您确实不想实现
View.OnClickListener
,只需单击按钮触发本地listener
。
e、 g.对于按钮0
使其生效
button0.setOnClickListener{listener.onClick(it)}
数据绑定可以减少
findViewById
行。默认情况下,“我的最新环境”为kotlin提供数据绑定。如果您确实不想实现视图。单击listener
只需在单击按钮时触发本地listener
。
e、 g.对于按钮0
使其生效
button0.setOnClickListener{listener.onClick(it)}
数据绑定可以减少
findViewById
行。默认情况下,我的最新环境为kotlin提供了数据绑定。它到底是如何工作的?它会崩溃吗?按钮是否没有响应?还有什么吗?你不需要使用listener。例如button0.setOnClickListener{newNumber.text=“0”}@MikeM。该应用程序运行良好。但点击按钮时没有反应。它到底是怎么不起作用的?它会崩溃吗?按钮是否没有响应?还有什么吗?你不需要使用listener。例如button0.setOnClickListener{newNumber.text=“0”}@MikeM。该应用程序运行良好。但单击按钮时没有响应。