Как я могу динамически добавлять новые 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)
                }

Он отлично работает для меня :)

Другие вопросы по тегам