Материал Android - невозможно преобразовать в com.google.android.material.chip.ChipGroup. - PullRequest
0 голосов
/ 05 марта 2019

У меня есть component_category_view.xml с ChipGroup, инициализированной внутри constraintLayout с идентификатором categoryList, Я использую следующий класс CategoryView.kt, чтобы накачать его и динамически обновить его чипами, и я поместил его в свою деятельность.

class CategoryView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {

init {
    inflateLayout()
}


private fun inflateLayout() {
    val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
    inflater.inflate(R.layout.component_category_view, this, true)
}
fun updateCategories(categories: List<Category>){
    categories.forEach {
        var chipText = "${it.title.capitalize()} (${it.amount})"
        val chip = Chip(this@CategoryView.context)
        chip.text = chipText
        chip.isCheckable = true
        chip.chipBackgroundColor = null

        categoryList.addView(chip)
    }
}


}

Однако, когда я запускаю и мой код достигает той части, где он вызывает updateCategories со списком категорий, появляется следующая ошибка:

E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.company.project, PID: 8262 java.lang.ClassCastException: com.company.project.common.ui.CategoryView не может быть приведен к com.google.android.material.chip.ChipGroup

component_category_view.xml выглядит так

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                               xmlns:app="http://schemas.android.com/apk/res-auto"
                                               android:orientation="vertical"
                                               android:layout_width="match_parent"
                                               android:layout_height="match_parent"
                                               android:background="@drawable/layout_border_bottom">

<com.google.android.material.chip.ChipGroup
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:id="@+id/categoryList"/>

</androidx.constraintlayout.widget.ConstraintLayout>

1 Ответ

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

Используйте тему материала вместо appCompact для решения проблемы чипа:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.Bridge">

<item name="colorAccent">@color/colorAccent</item>

</style>

<style name="AppTheme.NoActionBar">

<item name="windowActionBar">false</item>

<item name="windowNoTitle">true</item>

</style>

Обновлено

Ошибка произошла, потому что вы добавляете чип в список категорий, но требуется группа чипов, как показано в примере ниже:

private fun createChip(name: String, index: Int){

val chip = Chip(chip_group.context)

chip.id = index

chip.text = name

chip.isClickable = true

chip.isCheckable = true

chip.isCheckedIconVisible = false

chip_group.addView(chip)

}

И

override fun onActivityCreated(savedInstanceState: Bundle?) {

 super.onActivityCreated(savedInstanceState)

  for ((index, item) in categories.withIndex()){
createChip(item.name, index)} }
...