Как создать групповой обработчик динамически созданным кнопкам?

Динамически создал кнопки и добавил их в LinearLayout

fun but_gen (line:String, dec:String, contactframe:LinearLayout, tag:String) {
    val contacts = "Vasya|Fedya|Masha".split("|")
    for (contact in contacts) {
        val button = Button(this).apply {
            text = contact
        }
        contactframe.addView(button)
    }
}

Как создать для них групповой слушатель setOnClickListener с идентификацией по text? И будет ли он рабочеспособен если создан раньше кнопок?


Ответы (1 шт):

Автор решения: woesss

Групповой слушатель может быть только у групповых контейнеров типа ListView, RadioGroup и т.п.
В вашем случае можно сделать просто один экземпляр на всех и повесить на каждую кнопку в том же цикле. Что-то вроде:

val buttonClickListener by lazy {
    View.OnClickListener {
        when ((it as Button).text) {
            "Vasya" -> {}
            "Fedya" -> {}
            "Masha" -> {}
            else -> {}
        }
    }
}


fun but_gen (line:String, dec:String, contactframe:LinearLayout, tag:String) {
    val contacts = "Vasya|Fedya|Masha".split("|")
    for (contact in contacts) {
        val button = Button(this).apply {
            text = contact
            setOnClickListener(buttonClickListener)
        }
        contactframe.addView(button)
    }
}
→ Ссылка