首页 > 解决方案 > 为什么我不能将函数的结果绑定到 Android Studio 中的 TextView?

问题描述

我正在尝试通过 Google Android 开发课程自学 Kotlin(我是一周前开始的,并且在编码方面几乎没有经验)。
在教我构建一个有效的小费计算器的课程结束时,有一个可选的练习来创建一个类似的应用程序。
我选择创建一个动物年龄计算器,但我无法将结果绑定到它的 TextView。

我得到的输出是Animal age: %s
我想要的输出是我catAgeFormula(age)或我的结果dogAgeFormula(age)
我明白它向我展示了这个:<string name="animal_age">Animal age: %s</string>
但我不明白的是为什么我的绑定不起作用binding.ageResult.text = getString(R.string.animal_age)

这是我不确定的完整功能:

private fun calculateAge() {
    val stringInTextField = binding.userAge.text.toString()
    val age = stringInTextField.toIntOrNull()

    if (age == null || age == 0) {
        binding.ageResult.text = "0"
        return
    }

    when (binding.animalOptions.checkedRadioButtonId) {
    R.id.option_cat -> catAgeFormula(age)
    else -> dogAgeFormula(age)
    }

    binding.ageResult.text = getString(R.string.animal_age)
}

和输出 TextView :

<TextView
    android:id="@+id/age_result"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toBottomOf="@id/calculate_button"
    tools:text="Animal age : 42 years" />

这是我在 Stack Overflow 上的第一篇文章,所以如果搞砸了我真的很抱歉。
提前感谢您的帮助:)

标签: androidxmlkotlin

解决方案


您缺少该getString方法的参数

private fun calculateAge() {
    val stringInTextField = binding.userAge.text.toString()
    //...
    binding.ageResult.text = getString(R.string.animal_age, stringInTextField)
}

你的字符串是:

<string name="animal_age">Animal age: %s</string>

%s它期望接收 1 个String类型参数的方法。该方法getString可以接收 2 个参数。第一个是资源字符串的 id,第二个vararg是可以是任意数量的其他参数的 a。这是因为在资源上定义的字符串可以占用任意数量的其他参数,例如:

<string name="example">Example %1$s %2$d</string>

它将%2$d是一个预期作为第二个参数的数字

val example = getString(R.string.example, "one", 2)
//Example one 2

进一步的解释可以参考官方文档


推荐阅读