我在ScrollView(Root)内部有一个LinearLayout 在根线性布局内还有另一个Linearlayout(id = consultingTimeContainer)。 我已经扩大了布局,并将此扩大后的布局添加到Linear Layout(consultingTimeContainer)中。通货膨胀正常。但是问题是,当我将文本设置为第3个展开式布局时,该文本在第一个展开式布局中发生了变化。
有一个函数showTimePicker(viewId:Int)。该函数显示一个时间选择器,并将选择的时间设置为id = viewId的EditText。
每次我都尝试在不是第一次充气的充气视图中设置时间,而是在第一次充气的视图中设置时间!
<meta http-equiv="refresh" content="3600;URL='/users/sign_in'"/>
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)
}
}
当我在第二个展开视图中将时间设置为02:00时,该时间实际上在第一次展开的编辑文本中显示为02:00。这是错误的。
我认为每个夸张的布局都有相同ID的子代。如何克服这个问题?
答案 0 :(得分:0)
您说:“我认为每个夸大的版面都有相同ID的子代。如何解决此问题?” 您是否使用日志或在调试模式下检查视图ID是否对应于良好视图? 另外,是否不可能在xml中使用布局而不是在代码中膨胀?
我建议不要在参数中发送ID,而是在视图中发送
consultingFrom?.setOnClickListener { v -> showTimePicker(v)}
和showTimePicker
fun showTimePicker(edt: EditText) {
val cal = Calendar.getInstance()
val timeSetListener = TimePickerDialog.OnTimeSetListener { timePicker, hour, minute ->
cal.set(Calendar.HOUR_OF_DAY, hour)
cal.set(Calendar.MINUTE, minute)
edt.setText(SimpleDateFormat("HH:mm").format(cal.time))
}
TimePickerDialog(this, timeSetListener, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true).show()
}