Как я могу динамически добавлять новые Android-чипы в Android?
У меня есть класс Вопрос, который содержит массив тегов String. Я постараюсь показать каждый вопрос в обзоре переработчика с использованием Kotlin и каждого тега в новом чипе. Эти чипы будут включены в chipGroup.
Мой вопрос
Как я могу добавить каждый элемент тега массива в новый чип? Я пытаюсь сделать это, но это явно не работает.
if (tags != null) {
for (tag in tags) {
val chip = Chip(itemView.context)
}
}
Спасибо за все!
3 ответа
Можете добавить Chip
так же, как и любой другой ViewGroup
вот так:
for (index in tags.indices) {
val chip = Chip(chipGroup.context)
chip.chipText = "Item ${tags[index]}"
// necessary to get single selection working
chip.isClickable = true
chip.isCheckable = true
chipGroup.addView(chip)
}
для singleSelection не забудьте добавить в свою chipGroup:
chipGroup.isSingleSelection = true
или в XML
app:singleSelection="true"
Удачи и счастливого кодирования!
Я всегда получал следующую ошибку при попытке создать новый чип:
IllegalArgumentException: этот компонент требует, чтобы вы указали действительный атрибут android:textAppearance
Это может быть исправлено путем раздувания R.layout.chip
со следующей строкой:android:textAppearance="@style/TextAppearance.MaterialComponents.Chip"
В Котлине
.xml
<com.google.android.material.chip.ChipGroup
android:id="@+id/chipGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
</com.google.android.material.chip.ChipGroup>
Класс
data class Parametro(
var idParametro: Long,
var nombreParametro: String? )
Main.kt
listParametro.forEach { it->
val chip = Chip(context)
chip.id= it.idParametro.toInt()
chip.text= it.nombreParametro
chip.isClickable = true
chip.isCheckable = true
chip.setOnCheckedChangeListener { buttonView, isChecked ->
Log.i("checkedChipIds","${buttonView.id} $isChecked")
}
mBinding.chipGroup.addView(chip)
}
Он отлично работает для меня :)