Делаю простое приложение по заказу кофе, основываясь на одном курсе из
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().
Должно же быть нормальное решение, ведь этих параметров может быть не три, как у меня, а намного больше...