的strings.xml
<string name="my_string">Showing your number: %1$s</string>
ActivityExt.kt
fun Activity.showToast(textResId: Int, vararg formatArgs: String) {
val text = getString(textResId, formatArgs)
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
}
MainActivity.kt
val number = 11
showToast(R.string.my_string, number.toString())
显示以下文字的吐司:
Showing your number: [Ljava.lang.String;@2cfa3b]
为什么会这样?
答案 0 :(得分:11)
使用spread运算符:
fun Activity.showToast(textResId: Int, vararg formatArgs: String) {
val text = getString(textResId, *formatArgs)
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
}
目前,您正在传递一个数组作为格式参数。通过使用spread运算符,您可以将数组的内容作为格式参数传递。
答案 1 :(得分:11)
您应该使用spread operator将varargs传递给getString
函数:
val text = getString(textResId, *formatArgs)
这是因为formatArgs
函数中showToast
的类型是Array<String>
(没有vararg
类型或类似的东西),如果你如果没有*
传递,你只会传递一个参数,而不是它的内容。