23

I have a class called Question which contains a String array of tags. I'm trying to show every question in a Recyclerview using Kotlin and every tag in a new chip. These chips will be included inside a ChipGroup.

My question is:

How can I add every tag element of the array into a new Chip? I'm trying to do this but It's obviously not working.

if (tags != null) {
    for (tag in tags) {
        val chip = Chip(itemView.context)
    }
}
Nimantha
  • 6,405
  • 6
  • 28
  • 69
ramon guardia
  • 75
  • 1
  • 3
  • 13
  • Is this your entire code so far? You're not adding the new `Chip` instances to a parent `View` anywhere. It's also half Kotlin and half Java. – zsmb13 May 23 '18 at 17:48

2 Answers2

46

You can add Chips the same way as any other ViewGroup like so:

for (index in tags.indices) {
  val chip = Chip(chipGroup.context)
  chip.text= "Item ${tags[index]}"

  // necessary to get single selection working
  chip.isClickable = true
  chip.isCheckable = true
  chipGroup.addView(chip)
}

for singleSelection don't forget to add to your chipGroup:

chipGroup.isSingleSelection = true

or in xml

app:singleSelection="true"
Nimantha
  • 6,405
  • 6
  • 28
  • 69
kandroidj
  • 13,784
  • 5
  • 64
  • 76
5

I always got the following error when trying to create a new Chip:

IllegalArgumentException: This component requires that you specify a valid android:textAppearance attribute

This could be fixed by instead inflating a custom R.layout.chip with the following line: android:textAppearance="@style/TextAppearance.MaterialComponents.Chip"

Nicolai Weitkemper
  • 403
  • 1
  • 9
  • 18