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())
Toast with following text is showing:
Showing your number: [Ljava.lang.String;@2cfa3b]
Why this happens?
Use the spread operator:
fun Activity.showToast(textResId: Int, vararg formatArgs: String) {
val text = getString(textResId, *formatArgs)
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
}
Currently, you're passing an array as the format argument. By using the spread operator you pass the contents of the array as the format argument.
You should use the spread operator to pass in the varargs to the getString
function:
val text = getString(textResId, *formatArgs)
This is because the type of formatArgs
inside the showToast
function is Array<String>
(there's no vararg
type or anything like that), and if you pass that in without the *
, you'll only pass a single parameter, which will be the array instead of its contents.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With