setOnClickListener不适用于Android Kotlin中的按钮

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

我正在尝试使用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 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直接使用它

  • 使用如下所示的单击侦听器
  • 对于“多按钮单击”,您可以在“活动”中实现View.OnClickListener,并像以前一样使用它
  • 如果不想为每个按钮设置setOnClickListener,也可以使用数据绑定。它减少了大量代码

    首先,您不需要在Kotlin中使用findViewById。您可以使用xml中提供的id直接使用它

  • 使用如下所示的单击侦听器
  • 对于“多按钮单击”,您可以在“活动”中实现View.OnClickListener,并像以前一样使用它
  • 如果不想为每个按钮设置setOnClickListener,也可以使用数据绑定。它减少了大量代码


    这是因为您没有为按钮设置任何侦听器,而是定义了不调用任何方法的新侦听器

    这将起作用:

    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。该应用程序运行良好。但单击按钮时没有响应。