как вызвать представление, у которого был установлен идентификатор с помощью View.generateViewId () - PullRequest
0 голосов
/ 13 марта 2019

У меня есть метод с именем addRadioButtons, который запрашивает в моей базе данных кредитные карты пользователя, а затем отображается как radiobuttons в radiogroup в Dialog. Я сохраняю radiobutton и dataSnapshot как пару в HashMap.

Теперь моя проблема в том, что когда пользователь проверяет радиокнопку, я понятия не имею, как проверить, проверена ли она, потому что я не знаю id.

addRadioButtons ()

if(dataSnapshot.exists()){
    val ll = RadioGroup(context)
    for (source: DataSnapshot in dataSnapshot.children) {
        val last4 = source.child("last4").value.toString()
        val brand = source.child("brand").value.toString()

        val rdbtn = RadioButton(context)
        rdbtn.id = View.generateViewId()

        val textStr = "$brand ************$last4"
        rdbtn.text = textStr
        ll.addView(rdbtn)
        radioButtonMap.put(rdbtn, source)
   }
   radiogrp.addView(ll)
}

OpenDialog ()

private fun openDialog() {
    val dialog = Dialog(this.context!!)

    dialog.setContentView(R.layout.stripe_layout)
    val lp : WindowManager.LayoutParams = WindowManager.LayoutParams().apply {
        copyFrom(dialog.window?.attributes)
        width = WindowManager.LayoutParams.MATCH_PARENT
        height = WindowManager.LayoutParams.WRAP_CONTENT
    }

    radiogrp = dialog.findViewById<View>(R.id.radio_group) as RadioGroup
    addRadioButtons()
    //HOW DO I USE THIS?!?
    //radiogrp.setOnCheckedChangeListener

1 Ответ

1 голос
/ 13 марта 2019

нельзя ли использовать теги просмотра для какого-то уникального идентификатора?

например:

val rd = RadioGroup(context)
val records = listOf(
    "a" to "some record",
    "b" to "some record",
    "c" to "some record"
)
for (record in records) {
    val btn = RadioButton(context)
    btn.tag = record.first
    btn.id = View.generateViewId()
    rd.addView(btn)
}
radio_group.addView(rd)
rd.setOnCheckedChangeListener { _, checkedId ->
    val btn = radio_group.findViewById<RadioButton>(checkedId)
    println(btn.tag)
}

Таким образом, вы можете сделать val btn = radio_group.findViewWithTag<RadioButton>("a"), если это необходимо.

...