Android TextView: «Не конкатенировать текст, отображаемый с помощью setText»


Answers

Я столкнулся с тем же сообщением об ошибке lint и решил его таким образом.

Первоначально мой код был:

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

Я получил следующую ошибку

Do not concatenate text displayed with setText. Use resource string with placeholders.

Итак, я добавил это к strings.xml

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

Который является моим первоначальным «" + заполнителем для моего количества (количества).

Примечание . Моя переменная quantity была определена ранее и является тем, что я хотел добавить в строку. Мой код в результате был

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

После этого моя ошибка исчезла. Поведение в приложении не изменилось, и мое количество продолжало отображаться, как я этого хотел, без ошибки ворса.

Question

Я устанавливаю текст с помощью setText () следующим образом.

prodNameView.setText("" + name);

prodOriginalPriceView.setText("" + String.format(getString(R.string.string_product_rate_with_ruppe_sign), "" + new BigDecimal(price).setScale(2, RoundingMode.UP)));

В этом первом - простое использование, а во втором - текст с форматированием текста.

Android Studio настолько интересна, я использовал меню Analyze -> Code Cleanup и у меня появилось предложение на двух строках.

Не объединяйте текст, отображаемый с помощью setText. Используйте строку ресурсов с заполнителями. меньше ... (Ctrl + F1)

При вызове TextView # setText:

  • Никогда не вызывайте Number # toString () для форматирования чисел; он не будет правильно обрабатывать разделители фракций и соответствующие языковым значениям. Вместо этого используйте формат String # с соответствующими спецификациями формата (% d или% f).
  • Не передавайте строковый литерал (например, «Hello») для отображения текста. Жестко закодированный текст нельзя перевести на другие языки. Вместо этого рассмотрите использование строк ресурса Android.
  • Не создавайте сообщения, объединяя текстовые фрагменты. Такие сообщения нельзя надлежащим образом перевести.

Что я могу сделать для этого? Любой может помочь объяснить, что это такое и что я должен делать?




Вы должны проверить эту thread и использовать заполнитель, как его (не проверенный)

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



Links