gpt4 book ai didi

android - Kotlin onClickListener on按钮不起作用

转载 作者:行者123 更新时间:2023-12-02 13:06:55 32 4
gpt4 key购买 nike

我是Android开发的新手。
我目前正在Android Studio中使用Kotlin制作计算器。
我目前有9个带有数值的按钮(1、2、3、4、5、6、7、8、9)
我想当我单击按钮时,textView上的文本根据按钮上的值而改变。当我单击按钮时,textView上的文本会更改,但是,有一个奇怪的错误。像,当我第一次单击7时,它不会添加文本,然后,如果我单击某个其他按钮(如8)而不是添加8,则它将7添加到textView中,然后如果我单击说5,它将添加8。之5。我的MainActivity.kt代码是:-

package com.example.calculator

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
num1.setOnClickListener {
mainText.setText(mainText.getText().toString() + "1")
}

num2.setOnClickListener {
mainText.setText(mainText.getText().toString() + "2")
}

num3.setOnClickListener {
mainText.setText(mainText.getText().toString() + "3")
}

num4.setOnClickListener {
mainText.setText(mainText.getText().toString() + "4")
}

num5.setOnClickListener {
mainText.setText(mainText.getText().toString() + "5")
}

num6.setOnClickListener {
mainText.setText(mainText.getText().toString() + "6")
}

num7.setOnClickListener {
mainText.setText(mainText.getText().toString() + "7")
}

num8.setOnClickListener {
mainText.setText(mainText.getText().toString() + "8")
}

num9.setOnClickListener {
mainText.setText(mainText.getText().toString() + "9")
}

}

}
而我的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">


<TextView
android:id="@+id/mainText"
android:layout_width="408dp"
android:layout_height="68dp"
android:background="#f2f2f2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.333"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:textDirection="rtl"
android:paddingRight="20sp"
android:textSize="25sp"/>

<!-- First Row-->
<Button
android:id="@+id/num9"
android:layout_width="110dp"
android:layout_height="54dp"
android:text="9"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/num8"
app:layout_constraintTop_toTopOf="@+id/num8" />

<Button
android:id="@+id/num8"
android:layout_width="110dp"
android:layout_height="54dp"
android:layout_marginStart="8dp"
android:text="8"
app:layout_constraintBottom_toBottomOf="@+id/num7"
app:layout_constraintStart_toEndOf="@+id/num7" />

<Button
android:id="@+id/num7"
android:layout_width="110dp"
android:layout_height="54dp"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:text="7"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/mainText" />

<!-- Second Row -->

<Button
android:id="@+id/num6"
android:layout_width="110dp"
android:layout_height="54dp"
android:text="6"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/num5"
app:layout_constraintTop_toTopOf="@+id/num5" />

<Button
android:id="@+id/num5"
android:layout_width="110dp"
android:layout_height="54dp"
android:layout_marginStart="10dp"
android:text="5"
app:layout_constraintBottom_toBottomOf="@+id/num4"
app:layout_constraintStart_toEndOf="@+id/num4" />

<Button
android:id="@+id/num4"
android:layout_width="110dp"
android:layout_height="54dp"
android:layout_marginStart="8dp"
android:layout_marginTop="10dp"
android:text="4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/num7" />

<!-- Third Row -->

<Button
android:id="@+id/num3"
android:layout_width="110dp"
android:layout_height="54dp"
android:text="3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/num2"
app:layout_constraintTop_toTopOf="@+id/num2" />

<Button
android:id="@+id/num2"
android:layout_width="110dp"
android:layout_height="54dp"
android:layout_marginStart="10dp"
android:text="2"
app:layout_constraintBottom_toBottomOf="@+id/num1"
app:layout_constraintStart_toEndOf="@+id/num1" />

<Button
android:id="@+id/num1"
android:layout_width="110dp"
android:layout_height="54dp"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:text="1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/num4" />

</androidx.constraintlayout.widget.ConstraintLayout>
我很困惑为什么会发生此错误以及我的代码中的问题是什么。
提前致谢 :-

最佳答案

我试图用完全相同的代码重现此内容。但是似乎运气似乎还不错(请参见附件GIF)。不确定您到底是什么问题,但是您可以尝试在UI线程上发布setText调用(onClick实际上是UI线程,但是值得尝试在主线程上发布UI更新),也可以在文本 View 引用上调用requestLayout
enter image description here

  • 在UI线程上发布:
  • runOnUiThread {
    mainText.setText(mainText.getText().toString() + "9")
    }
  • 调用TextView的requestLayout
  • mainText.setText(mainText.getText().toString() + "8")
    mainText.requestLayout()
    再次,我想重申,所陈述的问题最终无法再现,而这些只是您可以尝试的建议。谢谢。

    关于android - Kotlin onClickListener on按钮不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63377192/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com