Ответ 1
Я просто скопировал код, и он работает хорошо. так что вам, возможно, потребуется проверить другое место, вот мои предложения.
- чистый проект
- проверять многоязычные файлы
- или просто используйте String.format, как и другие.
У меня есть приложение для Android и эта строка в ресурсах:
<string name="create_group_select_people">Select up to %1$d people!</string>
Это вызывается из фрагмента:
Integer countMax = 5; //also tried just "int" - nothing changed
getResources().getString(R.string.create_group_select_people, countMax);
но я получил ошибку:
Format string 'create_group_select_people' is not a valid format string so it should not be passed to String.format
Я не понимаю, что случилось? Когда я запускаю приложение, он показывает мне буквально "Выберите до% 1 $ d людей!"
Я просто скопировал код, и он работает хорошо. так что вам, возможно, потребуется проверить другое место, вот мои предложения.
Установите параметр, отформатированный как true в ресурсах:
<string name="some_text" formatted="true">
Use for String.format method. Parameter one: %s1
</string>
и используйте этот способ:
String.format(context.getString(R.string.some_text,"value 1"))
или таким образом:
context.getString(R.string.some_text,"value 1"))
Примечание. Отформатированный флаг должен быть установлен как true только для строк с заполнителями
Попробуйте File → Invalidate Caches/Restart...
, он исправил проблему для меня.
Ради других, кто может найти этот поток, одной из возможных причин этого предупреждения является то, что у вас есть несколько языков, определенных в файлах строковых ресурсов, и вы не указали аргументы формата в одном или нескольких из них.
Например, если у вас есть файл strings.xml в папке значений, а другой файл strings.xml - в папке values-es, но вы только добавили аргументы формата в strings.xml в папке значений, то предупреждение будет вызвано, потому что отсутствия аргументов формата в строковом ресурсе strings.xml в вашей папке values-es.
Попробуйте сделать "чистый проект", за которым следует закрытие и повторное открытие Android Studio.
Это фиксировало это для меня, это похоже на небольшую ошибку Android Studio/Lint.
Вероятно, вам не хватает метода форматирования класса String. Если вы устанавливаете его в TextView, правильный способ:
textView.setText(String.format(getResources().getString(R.string.create_group_select_people), countMax));
Вам нужен String formatter. Пожалуйста, измените код ниже
getResources().getString(R.string.create_group_select_people, countMax);
в
String temp = String.format(getResources().getString(R.string.create_group_select_people), countMax);
Для получения более подробной информации обратитесь к
Создайте функцию, поместите в нее свой код и добавьте этот @SuppressLint("StringFormatInvalid")
непосредственно перед функцией. Надеюсь, поможет.