Предупреждение Kotlin Android Studio «Не объединяйте текст, отображаемый с помощью setText. Используйте строку ресурса с заполнителями». - PullRequest
0 голосов
/ 12 марта 2019

Я сделал простую программу, чтобы узнать о конкатенации в Android Studio с Kotlin. Итак, я попытался получить строковое значение из ресурсов в strings.xml, как показано ниже, и объединить со значением

<string name="txt_show">Your lucky number is %1$s</string>

Я получил предупреждение "Не объединять текст ..." от getString

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val firstNumber = numEditText.text

    processButton.setOnClickListener {
        val result = concatText(firstNumber.toString().toDouble())
        resultView.text = getString(R.string.txt_show, " ") + result.format(2)

    }
}

private fun concatText(myNumber: Double): Double {
    val luckyNumber = 1.79
    return luckyNumber * myNumber
}
private fun Double.format(digits: Int) = java.lang.String.format("%.${digits}f", this)} 

Заменив

resultView.text = getString (R.string.txt.show, "") + result.format (2)

на

val finalResult = result.toInt ()

resultView.text = getString (R.string.txt_show, finalResult)

И заменить % 1 $ s на % 1 $ d в ресурсах strings.xml

Предупреждение ушло, но у меня возникли проблемы, во-первых, результат - целое число, а это не то, что я ожидал. Это должно быть в два раза. Во-вторых, добавление формата функции в getString остановит программу с сообщением «Неожиданная ошибка ...» на экране.

Как я могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Сначала результат - целое число, которое не соответствует ожиданиям. Это должно быть двойным.

Тогда почему ты позвонил toInt? Просто используйте

resultView.text = getString(R.string.txt_show, result) 

и %1$.2f (или просто %.2f) в строке вместо %1$d для форматирования двухзначного дробного числа. Вы можете видеть, что оно указано так же, как в функции format в вашем коде. Документация для строк формата (что все это означает %d и т. Д.) Находится по адресу https://developer.android.com/reference/java/util/Formatter.html.

1 голос
/ 12 марта 2019

Если у вас есть строка с некоторыми заполнителями, такими как:

<string name="price_string">Your price: %d</string>

Сначала вы должны прочитать это значение, а затем заполнить его

JAVA

String text = getString(R.string.price_string, 2.5);

Котлин

val text = getString(R.string.price_string, 2.5)

.

или «длиннее»:

JAVA

// Read text
String priceString = getString(R.string.price_string);

// Fill it
String output = String.format(priceString, 2.5);

Котлин

// Read text
val priceString = getString(R.string.price_string)

// Fill it
val output = String.format(priceString, 2.5)
// or
val output = priceString.format(2.5)

Если у вас есть %s, вы должны заполнить его String. Здесь у вас есть больше информации: https://developer.android.com/guide/topics/resources/string-resource#formatting-strings

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...