Estoy configurando el texto usando setText () de la siguiente manera.
prodNameView.setText("" + name);
prodOriginalPriceView.setText("" + String.format(getString(R.string.string_product_rate_with_ruppe_sign), "" + new BigDecimal(price).setScale(2, RoundingMode.UP)));
En eso, el primero es de uso simple y el segundo es configurar el texto con el formato del texto.
Android Studio es muy interesante, utilicé Menú Analyze -> Code Cleanup
y recibí sugerencias sobre las dos líneas anteriores.
No concatene el texto que se muestra con setText. Use una cadena de recursos con marcadores de posición. menos ... (Ctrl + F1)
Al llamar a TextView # setText:
- Nunca llame a Number # toString () para formatear números; no manejará separadores de fracciones y dígitos específicos de la localidad correctamente. Considere usar el formato String # con las especificaciones de formato adecuadas (% do% f) en su lugar.
- No pase un literal de cadena (por ejemplo, "Hola") para mostrar texto. El texto codificado no se puede traducir correctamente a otros idiomas. Considere usar cadenas de recursos de Android en su lugar.
- No cree mensajes concatenando fragmentos de texto. Dichos mensajes no se pueden traducir correctamente.
¿Qué puedo hacer por esto? ¿Alguien puede ayudar a explicar qué es y qué debo hacer?
android
concatenation
textview
string-concatenation
Pratik Butani
fuente
fuente
String
intosetText()
. Ej:setText(name)
en lugar desetText("" + name)
. Porque si concatena texto, no se traducirá como si usara texto codificado como el mensaje notificaNPE
siname
es asíNULL
name
no esNULL
antes de usar lasetText()
función.<string name="string_product_rate_with_ruppe_sign">Something %1$d</string>
Y en su código java hace algo como esto:prodOriginalPriceView.setText(getString(R.string.string_product_rate_with_ruppe_sign), price);
(puede formatear en el archivo xml: [ developer.android.com/guide/topics/resources/…Respuestas:
Resource tiene la versión de getString sobrecargada que toma un
varargs
tipoObject
: getString (int, java.lang.Object ...) . Si configura correctamente su cadena en strings.xml, con los marcadores de posición correctos, puede usar esta versión para recuperar la versión formateada de su cadena final. P.ejutilizando
getString(R.string.welcome_message, "Test", 0);
android devolverá una cadena con
Acerca de
setText("" + name);
Tu primer ejemplo
prodNameView.setText("" + name);
no tiene ningún sentido para mí. TextView puede manejar valores nulos. Si el nombre es nulo, no se dibujará ningún texto.fuente
%1$f
a la cadena, en strings.xml y luego llamarsetText(getString(R.string.string_product_rate_with_ruppe_sign, new BigDecimal(price).setScale(2, RoundingMode.UP).floatValue() ));
%1$d
. @ reegan29No se confunda con % 1 $ s y % 2 $ d en el answer.Here aceptada es un poca información adicional.
Ejemplo
Crearemos la siguiente cadena formateada donde las partes grises se insertan mediante programación.
Su
string resource
:Haga lo
string substitution
que se indica a continuación:Nota:
fuente
Me encontré con el mismo mensaje de error de pelusa y lo resolví de esta manera.
Inicialmente mi código era:
Tuve el siguiente error
Entonces, agregué esto a
strings.xml
Cuál es mi "" inicial + un marcador de posición para mi número (cantidad).
Nota : Mi
quantity
variable se definió previamente y es lo que quería agregar a la cadena. Mi código como resultado fueDespués de esto, mi error desapareció. El comportamiento en la aplicación no cambió y mi cantidad continuó mostrándose como quería ahora sin un error de pelusa.
fuente
Debe verificar este hilo y usar un marcador de posición como el suyo (no probado)
fuente
No concatene texto dentro de su método setText () , concatene lo que quiera en una cadena y ponga ese valor de cadena dentro de su método setText () .
Ej: forma correcta
No concatene dentro de setText () como
fuente
El problema es porque está agregando
""
al principio de cada cadena.lint analizará los argumentos que se pasan
setText
y generará advertencias; en su caso, la siguiente advertencia es relevante:ya que estás concatenando cada cadena con
""
.elimine esta concatenación ya que los argumentos que está pasando ya son texto. Además, puede usarlo
.toString()
si es necesario en cualquier otro lugar en lugar de concatenar su cadena con""
fuente
Si no necesita admitir i18n, puede deshabilitar esta comprobación de pelusas en Android Studio
Archivo -> Configuración -> Editor -> Inspecciones -> Android -> Lint -> TextView Internationalization (desmarque esto)
fuente
Puedes usar esto, me funciona
fuente
fuente
No te enojes, es demasiado simple.
fuente