@ti1

Android/Java — как выводить несколько переменных в строке?

Делаю простое приложение по заказу кофе, основываясь на одном курсе из Udacity, только добавляя свои фишки, ибо они оставляют много "дыр".

В общем, пользователь там накликивал нужное количество чашек кофе, добавлял сливки и/или шоколад по желанию, и жал кнопку "заказать".

В зависимости от того, что он там накликивал, в файле strings.xml хранились строки типа:
<string name="total_coffee_cost">You ordered %1$d cups of coffee. \nPrepare to pay $%2$d. \nThank you!</string>
    <string name="total_coffee_cost_zero">You have not ordered any cup of coffee. \nTry to choose again. \nThank you!</string>


Выводилось в MainActivity.java все это через setText(), в зависимости от количества выбранного кофе с топпингами (там девять веток if-else, привожу две, чтобы не засорять):
private TextView createOrderSummary(View view){
        CheckBox whippedCreamCheckBox = findViewById(R.id.whipped_cream_checkbox);
        hasWhippedCream = whippedCreamCheckBox.isChecked();

        CheckBox chocolateCheckBox = findViewById(R.id.chocolate_checkbox);
        hasChocolate = chocolateCheckBox.isChecked();
        
        TextView priceMessage = findViewById(R.id.price_text_view);
        if (numberOfCoffees == 0)
            priceMessage.setText(getString(R.string.total_coffee_cost_zero));
        ....
        else if ((numberOfCoffees > 1) && (!hasWhippedCream) && (!hasChocolate))
        priceMessage.setText(getString(R.string.total_coffee_cost, numberOfCoffees, numberOfCoffees * priceOfCup));
        ....
        return priceMessage;
}


Все было хорошо, но потом в курсе решили добавить еще одну переменную - имя пользователя, которое тот вводит при заказе. И оказалось, что я не могу просто взять, и добавить третью переменную в строку, сделав, например, так:

<string name="total_coffee_cost">Hi, %1$s! You ordered %2$d cups of coffee. \nPrepare to pay $%3$d. \nThank you!</string>


Погуглив, выяснил, что метод setText() не может работать с тремя и более параметрами...

Как быть? В курсе Udacity не заморачиваются с этим - они напрямую выводят данные, не храня строки ни в strings.xml, не используя setText().

Должно же быть нормальное решение, ведь этих параметров может быть не три, как у меня, а намного больше...
  • Вопрос задан
  • 303 просмотра
Пригласить эксперта
Ответы на вопрос 1
iLLuzor
@iLLuzor
Java, Kotlin, Android Developer
При чём тут параметры метода setText()? Вы передаёте аргументы в getString(). В нём количество аргументов formatArgs может быть любым. Почитайте про varargs.

Предполагаю, что вы просто немного путаетесь. Для удобства объявите переменную для текста:
String textString = getString(R.string.total_coffee_cost, numberOfCoffees, numberOfCoffees * priceOfCup, param3, param4);
priceMessage.setText(textString);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы