Android TextView: "No concatenar el texto mostrado con setText"

Estoy fijando el texto usando setText () siguiendo la 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 que primero es un uso simple y el segundo es el establecimiento de texto con el texto de formato.

Android Studio es tan interesante, utilicé Menu Analyze -> Code Cleanup y tuve sugerencia en dos líneas como.

Introduzca aquí la descripción de la imagen

No concatene el texto que se muestra con setText. Utilice cadena de recursos con marcadores de posición. Menos … (Ctrl + F1)

Cuando llama a TextView # setText:

  • Nunca llame a Number # toString () para dar formato a números; No manejará correctamente los separadores de fracción y los dígitos específicos de la configuración regional. Considere utilizar el formato String # con las especificaciones de formato adecuadas (% d o% f).
  • No pase una cadena literal (por ejemplo, "Hola") para mostrar texto. El texto codificado en disco duro no se puede traducir correctamente a otros idiomas. Considere la posibilidad de utilizar cadenas de recursos de Android en su lugar.
  • No cree mensajes al concatenar fragmentos de texto. Tales mensajes no se pueden traducir correctamente.

¿Qué puedo hacer por esto? ¿Alguien puede ayudar a explicar qué es la cosa y qué debo hacer?

Resource tiene la versión sobrecargada de getString que toma una varargs del tipo Object : getString (int, java.lang.Object …) . Si ha configurado correctamente su cadena en strings.xml, con los titulares de lugar correctos, puede utilizar esta versión para recuperar la versión formateada de su String final. P.ej

 <string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string> 

Usando getString(R.string.welcome_message, "Test", 0);

Android devolverá una cadena con

  Hello Test! you have 0 new messages 

Acerca de setText("" + name);

Su primer ejemplo, prodNameView.setText("" + name); No tiene sentido para mí. El TextView es capaz de manejar valores nulos. Si el nombre es nulo, no se dibujará ningún texto.

Me encontré con el mismo mensaje de error y lo resolví de esta manera.

Al principio mi código era como:

 private void displayQuantity(int quantity) { TextView quantityTextView = (TextView) findViewById(R.id.quantity_text_view); quantityTextView.setText("" + quantity); } 

Tengo el error "No concatenar el texto que se muestra con setText. Utilizar cadena de recursos con marcadores de posición." asi que

He añadido esto a strings.xml

 <string name="blank">%d</string> 

Cuál es mi inicial "" + un placeholder para mi número (cantidad).

Nota: mi variable de cantidad se definió previamente y es lo que quería añadir a la cadena. En el código java que escribí.

 private void displayQuantity(int quantity) { TextView quantityTextView = (TextView) findViewById(R.id.quantity_text_view); quantityTextView.setText(getString(R.string.blank, quantity)); } 

Y mi error se fue. El comportamiento de la aplicación no cambió y mi cantidad continuó mostrándose como quería ahora sin un error de pelusa.

Usted debe comprobar este hilo y utilizar un marcador de posición como el suyo (no probado)

 <string name="string_product_rate_with_ruppe_sign">Price : %1$d</string> String text = String.format(getString(R.string.string_product_rate_with_ruppe_sign),new BigDecimal(price).setScale(2, RoundingMode.UP)); prodOriginalPriceView.setText(text); 

El problema es porque está agregando "" al principio de cada cadena.

Lint escaneará los argumentos que se pasen a setText y generará advertencias, en su caso la siguiente advertencia es relevante:

No cree mensajes al concatenar fragmentos de texto. Tales mensajes no se pueden traducir correctamente.

Como usted está concatenando cada cadena con "" .

Elimine esta concatenación ya que los argumentos que está pasando ya son texto. Además, puede utilizar .toString() si es necesario en cualquier otro lugar en lugar de concatenar la cadena con ""

  • Diferencia entre setText () y append ()
  • Android TextView debe desplazarse verticalmente automáticamente
  • Cómo encontrar el área de texto (altura / ancho) de TextView de forma programática en android
  • Configuración de textIsSelectable en TextView con el dellipsize de elimina elimina elipse
  • XAMARIN (C #) - ¿Hay una manera de subrayar un TextView mediante programación?
  • Establecer desvanecimiento de texto en Android 4.0.3
  • Html.ImageGetter TextView
  • cómo a la palabra highlite que es chascar adentro Textview android
  • ¿Es posible agregar un TextView desplazable a un ListView?
  • Android: escala la imagen de fondo de TextView para ajustar XY
  • Programáticamente establecido izquierda dibujable en un TextView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.