android - 为什么我不能将函数的结果绑定到 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 上的第一篇文章,所以如果搞砸了我真的很抱歉。
提前感谢您的帮助:)
解决方案
您缺少该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
进一步的解释可以参考官方文档
推荐阅读
- java - 使用 JPackage 或 Java 如何删除使用预 JPackage 安装程序创建的文件
- c# - 基于“System.Security.Principal”的 c# 用户身份验证是否适用于 ADFS 和 Azure Active Directory?
- python - Numpy .eig 返回矩阵行排列
- python-3.x - 如何将模块导入为 Python 字典?
- macos - 使用 MacOS 在 Flutter 中复制 SelectableText
- javascript - 有办法只将部分字符串对象保存到异步存储中吗?
- c# - 在列表视图中显示反序列化列表的项目
- javascript - 我对此完全感到困惑,因为 else if 语句似乎破坏了程序?
- python - 当询问麦克风权限时,selenium webdriver 无法单击允许
- python - django测试客户端CRUD API,单元测试