首页 > 解决方案 > 我的 Kotlin 代码中非常基本的 textView 问题

问题描述

我刚开始学习 Kotlin,并决定编写一个非常基本的程序。它应该是一个货币转换器,但现在,我只想将我在“editTextEingabe”(“Eingabe”= 德语输入)​​中输入的数字提供给 textView“textViewAusgabe”。我将在下面链接我的代码,如果有人可以帮助我,我会非常高兴。谢谢!

PS:“editTextEingabe”设置为只允许输入数字和小数,但我不知道这是否会改变任何东西。

更新2:问题是,在按下按钮按钮Berechnen 后,我在editTextEingabe 中输入的十进制数没有出现在textViewAusgabe 中。更简单:我想将我刚刚在 editText 中输入的文本(这里:一个数字)提供给 textView 小部件,但这不起作用。

import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var eingabe = findViewById<EditText>(R.id.editTextEingabe)
        var eingabeString: String = eingabe.toString()
        var ergebnis: String
        val buttonBerechnen: Button = findViewById(R.id.buttonBerechnen)

        buttonBerechnen.setOnClickListener() {
            ergebnis = eingabeString
            textViewAusgabe.text = ("$ergebnis")
        }

    }
}

更新:这是我的 XML,如果有帮助的话:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textViewAusgabe"
        android:layout_width="108dp"
        android:layout_height="46dp"
        android:layout_marginTop="228dp"
        android:background="#4600BCD4"
        android:textAlignment="center"
        app:layout_constraintStart_toEndOf="@+id/textView3"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editTextEingabe"
        android:layout_width="121dp"
        android:layout_height="46dp"
        android:layout_marginStart="64dp"
        android:layout_marginTop="228dp"
        android:background="#4600BCD4"
        android:ems="10"
        android:hint="$ eingeben"
        android:inputType="number|numberDecimal"
        android:numeric="integer|decimal"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="43dp"
        android:layout_height="30dp"
        android:layout_marginTop="236dp"
        android:text="$ = "
        android:textAlignment="center"
        android:textSize="22sp"
        app:layout_constraintStart_toEndOf="@+id/editTextEingabe"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="57dp"
        android:layout_height="27dp"
        android:layout_marginTop="236dp"
        android:layout_marginEnd="36dp"
        android:text="€"
        android:textSize="22sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toEndOf="@+id/textViewAusgabe"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/buttonBerechnen"
        android:layout_width="116dp"
        android:layout_height="69dp"
        android:layout_marginStart="144dp"
        android:layout_marginBottom="188dp"
        android:background="#4600BCD4"
        android:text="Berechnen"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>```

标签: androidkotlin

解决方案


通过调用eingabe.toString(),您可以在调用时捕获 的当前输入值eingabe并将其分配给eingabeString. 之后的输入值发生的任何事情eingabe都不会反映在eingabeString. 因此,当OnClickListener火灾发生时,您的代码不会从 中获取最新值eingabe,而是使用保存在eingabeString. 我认为修复它的一种简单方法是完全摆脱eingabeString并始终在将输入值eingabe分配给时引用ergebnis

var eingabe = findViewById<EditText>(R.id.editTextEingabe)
var ergebnis: String
buttonBerechnen: Button = findViewById(R.id.buttonBerechnen)

buttonBerechnen.setOnClickListener() { 
    ergebnis = eingabe.toString()
    textViewAusgabe.text = ("$ergebnis")
}

删除编辑


推荐阅读