将布局动态添加到存在一些ID问题的Linearlayout中

时间:2019-06-19 12:22:07

标签: android android-layout user-interface

我在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的子代。如何克服这个问题?

1 个答案:

答案 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()
}