#android #kotlin
Вопрос:
Я сделал собственный выбор дня подряд радио-кнопки внутри фрагмента, который содержит дни месяца и идентификатор каждого это что-то вроде этого @ id/day_01
, и @ id/day_02
я хочу добавить текст к каждому, кто говорит, что название дня недели, как Вэнь 05 Итак, прежде всего я хочу найти идентификаторы каждого из них в цикле for и изменить текст этой точки зрения в цикле, но не знаю, как сделать эту часть моего текущего кода в моем фрагменте:
val c = Calendar.getInstance()
val year = c.get(Calendar.YEAR)
val month = c.get(Calendar.MONTH)
val currentDay = c.get(Calendar.DAY_OF_MONTH)
val hour = c.get(Calendar.HOUR_OF_DAY)
val minute = c.get(Calendar.MINUTE)
val daysInMonth = c.getActualMaximum(month)
fun getMonth() {
if (daysInMonth==29) {
view.day_31.visibility = View.GONE
view.day_30.visibility = View.GONE
} else if (daysInMonth==30) {
view.day_31.visibility = View.GONE
}
}
getMonth()
for (i in 1 .. daysInMonth) {
val dayOfMonth = GregorianCalendar(year, month, i)
val day = dayOfMonth.get(Calendar.DAY_OF_MONTH).toString()
view.day_"i".text = day
}
Я не знаю, что делать с этой частью view.day_"i".text = day
, но я хочу, например, когда
i=3
цикл делает что-то вроде этого view.day_03.text = "03"
если вы знаете лучший способ сделать пользовательский выбор даты, пожалуйста, покажите мне это
Комментарии:
1. Вы можете очень быстро найти ответ с помощью простого поиска в Google. Вы можете добраться сюда kotlinlang.org/docs/control-flow.html#for-loops . для ((индекс, значение) в массиве.withIndex()) { println(«элемент с индексом $равен значению$») }
2. Вы можете использовать
radiogroup.setoncheckedchangedlistener
, чтобы узнать, какой переключатель установлен в радиогруппе.3. В любое время, когда вы обнаружите, что создаете более нескольких одинаковых представлений, вам следует остановиться и рассмотреть возможность использования RecyclerView вместо множества повторяющихся представлений с идентификаторами. Это не очень ремонтопригодно.
4. @РазванС. спасибо, но я знаю, как работать с циклами, то, что я ищу, — это как сделать то, что я сказал в последних 3 строках моего вопроса. как написать что-то вроде этого view.day_»я».текст
5. @VenkateshTalacheeru хорошо, спасибо, я должен это проверить
Ответ №1:
Существует getIdentifier()
функция для получения представлений элементов по имени. Этот метод не рекомендуется, поскольку он использует отражение, что негативно влияет на производительность. С учетом того, что осталось всего 31 день, это, вероятно, нормально.
for (i in 1 .. daysInMonth) {
//...
val dayViewId = resources.getIdentifier("day_$i", "id", packageName)
view.findViewById<TextView>(dayViewId).text = day
}
Если вы находитесь во Фрагменте, используйте requireContext().packageName
.
Кстати, класс Calendar устарел и не предназначен для использования в новых проектах. Смотрите здесь объяснение.
Комментарии:
1. спасибо, это сработало. однако я обдумываю то, что вы сказали о моем пути. на самом деле, я не нашел другого решения, чтобы сделать свой выбор даты, и, поскольку я не профессионал, в моем коде определенно много проблем, но сейчас я предпочитаю оставить все как есть и сделать его лучше в будущем