Можно ли автоматически изменять название строки в getString()?
Суть в том, чтобы автоматически изменять строку, подставляемую в TextView, напрмер:
- Есть строки с названиями формата : common_q(ЦИФРА ВОПРОСА)
<string name="common_q1">В каком случае водитель совершит вынужденную остановку?</string>
<string name="common_q2">Сколько полос для движения имеет данная дорога?</string>
<string name="common_q3">Выезжая с грунтовой дороги на перекресток, Вы попадаете:</string>
- Есть функция, которая ставит текст в TextView
fun nextquestion(){
bindingClass.tvQuestion.setText(R.string.common_qNumber)
}
- Есть переменная Number, которая изначально =1 и прибавляет +1 каждое нажатие кнопки. Суть в том, чтоб при нажатии на кнопку в TextView записывалась каждый раз новая String путем изменения цифры в конце названия. Можно ли это как либо реализовать в Android Studio с помощью Kotlin ? Ответы для Java тоже будут полезны. Заранее спасибо :)
Ответы (2 шт):
Автор решения: Alex_Skvortsov
→ Ссылка
В ресурсах:
<string-array name="common_q">
<item>В каком случае водитель совершит вынужденную остановку?</item>
<item>Сколько полос для движения имеет данная дорога?</item>
<item>Выезжая с грунтовой дороги на перекресток, Вы попадаете:</item>
</string-array>
В коде:
fun nextQuestion() {
val questions = activity.resources.getStringArray(R.array.common_q)
var nextIndex: Int = //любым способом определяете номер (нумерация с нуля), например nextIndex = Number - 1
bindingClass.tvQuestion.setText(questions[nextIndex]) //еще надо проверку на то, что номер валидный, то есть от 0 до 2, но это уже детали
}
Автор решения: Eugene Krivenja
→ Ссылка
Есть вот такой трюк, применим к любым ресурсам.
var num = 1
val resId = resources.getIdentifier("common_q$num", "string", packageName)
val finalResId = if (resId == 0) R.string.unknown else resId
getIdentifier() вернет ноль когда ресурс не найден, значение по умолчанию очень желательно чтобы не поймать позже NotFoundException