No se puede resolver la cadena suministrada al parámetro vararg en la function de extensión

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()) 

La tostada con el siguiente text muestra:

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

¿Por qué sucede esto?

Use el operador de propagación :

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

Actualmente, está pasando una matriz como argumento de formatting. Al usar el operador de difusión, pasa los contenidos de la matriz como el argumento de formatting.

Debe usar el operador de propagación para pasar los varargs a la function getString :

 val text = getString(textResId, *formatArgs) 

Esto se debe a que el tipo de formatArgs dentro de la function showToast es Array<String> (no hay vararg tipo vararg o algo así), y si lo vararg sin * , solo pasará un único parámetro, que será el matriz en lugar de su contenido.

  • Cómo crear variables en el context principal
  • Cómo organizar los methods de extensión de Kotlin
  • Problema con el método de extensión en el script de Kotlin
  • Kotlin: Cómo extender la class enum con una function de extensión
  • Choque de extensión Kotlin
  • Kotlin class NoClassDefFoundError crash
  • Complemento de estudio Android con id: 'kotlin-android-extensions'
  • Propiedad de extensión en línea Kotlin
  • acceso al método de extensión kotlin en otro kt
  • Función genérica de extensión de Kotlin con types básicos sin API de reflexión
  • Funciones de extensión para classs genéricas en Kotlin