У меня есть LinearLayout внутри ScrollView (Root)
Существует еще один Linearlayout (id = consultingTimeContainer), который находится внутри корневого линейного макета.
Я раздул макет и добавил этот раздутый макет в линейный макет (consultingTimeContainer). Инфляция работает правильно. Но проблема в том, что когда я устанавливаю текст в 3-й надутой разметке, текст изменяется в первой раздувной макете.
Есть функция showTimePicker (viewId: Int). Функция показывает время выбора и устанавливает выбранное время для EditText с id = viewId.
Каждый раз, когда я пытаюсь установить время в завышенном представлении, которое не является первым завышенным представлением, время устанавливается в первом завышенном представлении!
fun addNewConsultingTime(firstOne: Boolean) {
val inflatedView: View? =
LayoutInflater.from(this)
.inflate(R.layout.item_consulting_time, null)
consultingTimeContainer.addView(inflatedView, consultingTimeContainer.childCount)
val addNewConsultingTime = inflatedView?.findViewById<ImageView>(R.id.add)
val consultingFrom = inflatedView?.findViewById<TextInputEditText>(R.id.consultingFrom)
val consultingTo = inflatedView?.findViewById<TextInputEditText>(R.id.consultingTo)
consultingFrom?.isFocusable = false
consultingFrom?.isClickable = true
consultingTo?.isClickable = true
consultingTo?.isFocusable = false
if (firstOne) {
addNewConsultingTime?.setImageResource(R.drawable.plus_icon)
addNewConsultingTime?.tag = "add"
} else {
addNewConsultingTime?.setImageResource(R.drawable.remove)
addNewConsultingTime?.tag = "remove"
}
addNewConsultingTime?.setOnClickListener {
if (addNewConsultingTime.tag == "add")
addNewConsultingTime(false)
else
consultingTimeContainer.removeView(addNewConsultingTime.parent as View)
}
consultingTo?.setOnClickListener {
showTimePicker(consultingTo.id)
}
consultingFrom?.setOnClickListener {
showTimePicker(consultingFrom.id)
}
}
fun showTimePicker(viewId: Int) {
val cal = Calendar.getInstance()
val timeSetListener = TimePickerDialog.OnTimeSetListener { timePicker, hour, minute ->
cal.set(Calendar.HOUR_OF_DAY, hour)
cal.set(Calendar.MINUTE, minute)
findViewById<EditText>(viewId).setText(SimpleDateFormat("HH:mm").format(cal.time))
}
TimePickerDialog(this, timeSetListener, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true).show()
}
Когда я устанавливаю время как 02:00 во втором завышенном виде, время фактически отображается в первом завышенном тексте редактирования как 02:00. Это неправильно.
Я думаю, что у каждого раздутого макета есть потомки с одинаковыми идентификаторами. Как преодолеть эту проблему?