12

字符串.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())

显示带有以下文本的 Toast:

Showing your number: [Ljava.lang.String;@2cfa3b]

为什么会发生这种情况?

4

2 回答 2

22

使用扩展运算符:

fun Activity.showToast(textResId: Int, vararg formatArgs: String) {
    val text = getString(textResId, *formatArgs)
    Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
}

目前,您正在传递一个数组作为格式参数。通过使用扩展运算符,您可以将数组的内容作为格式参数传递。

于 2017-06-28T09:24:08.517 回答
14

您应该使用扩展运算符将可变参数传递给getString函数:

val text = getString(textResId, *formatArgs)

这是因为函数formatArgs内部的类型是(没有类型或类似的东西),如果你在没有 的情况下传递它,你只会传递一个参数,它将是数组而不是它的内容。showToastArray<String>vararg*

于 2017-06-28T09:24:37.310 回答