Saltar al contenido

Chip Group OnCheckedChangeListener () no activado

Solución:

Tu código está bien, el único problema es que setOnCheckedChangeListener() solo funciona cuando tu ChipGroup es para singleSelection

Lea esta documentación de ChipGroup

setOnCheckedChangeListener()

  • Registre una devolución de llamada para que se invoque cuando el chip marcado cambie en este grupo.
  • Esta devolución de llamada solo se invoca en el modo de selección única.

LEER TAMBIÉN

Manipulación de fichas marcadas

Llame a setOnCheckedChangeListener (OnCheckedChangeListener) para registrar una devolución de llamada que se invocará cuando el chip marcado cambie en este grupo. Esta devolución de llamada solo se invoca en el modo de selección única.

si quieres usar setOnCheckedChangeListener() de ChipGroup de lo que necesitas hacer app:singleSelection="true"

ACTUALIZAR

en base a su comentario a continuación, he agregado un código de muestra para manejar la selección de ChipGroup

CÓDIGO DE MUESTRA para mantener la selección en ChipGroup

Layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.material.chip.ChipGroup
            android:id="@+id/chipGroup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginBottom="8dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            >

        </com.google.android.material.chip.ChipGroup>
    </androidx.constraintlayout.widget.ConstraintLayout>

    <Button
        android:layout_width="match_parent"
        android:text="Get Result"
        android:id="@+id/btnShowResult"
        android:layout_gravity="bottom"
        android:layout_height="wrap_content" />
</LinearLayout>

Código de actividad

public class Main3Activity extends AppCompatActivity {

    public ChipGroup chipGroup;
    public Button btnShowResult;
    public ArrayList<Boolean> booleanArrayList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        chipGroup = findViewById(R.id.chipGroup);
        btnShowResult = findViewById(R.id.btnShowResult);


        btnShowResult.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                for (int i = 0; i < booleanArrayList.size(); i++) {
                    Log.e("RESULT", i + " :" + booleanArrayList.get(i));
                }
            }
        });

        for (int i = 0; i < 5; i++) {

            Chip chip = new Chip(this);
            chip.setId(i);
            chip.setTag(i);

            booleanArrayList.add(false);
            chip.setText("Chip No : " + i);
            chip.setCheckable(true);

            chip.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton compoundButton, boolean b) {

                    int tag = (int) compoundButton.getTag();
                    booleanArrayList.set(tag, b);

                }
            });
            chipGroup.addView(chip);

        }

        chipGroup.invalidate();


        chipGroup.setOnCheckedChangeListener(new ChipGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(ChipGroup chipGroup, int i) {

                Chip chip = chipGroup.findViewById(i);


                if (chip != null)
                    Toast.makeText(getApplicationContext(), "Chip is " + chip.getText().toString(), Toast.LENGTH_SHORT).show();

                Log.e("OnCheckedChangeListener", "Called");
            }
        });

    }

    ChipGroup.OnCheckedChangeListener onCheckedChangeListener = new ChipGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(ChipGroup chipGroup, int i) {

        }
    };

}

Para obtener más información, consulte los artículos a continuación.

  • Fichas: componentes de material para Android
  • Android P: Chips y ChipGroup
  • Exploración de las adiciones a la biblioteca de compatibilidad de diseño de Android v28

Todos los chips deben tener el android:checkable="true" propiedad para que exista el disparador en ellos.

Además de configurar el control inicial de cualquier chip (sin dar un toque), el orden de ejecución debe ser primero la creación del oyente con chipGroup.setOnCheckedChangeListener() y luego chip.isChecked = true.

Por lo tanto, podría manejar la propiedad comprobable del xml e isChecked dinámicamente.

.xml

<com.google.android.material.chip.ChipGroup
    ..
    app:singleSelection="true">
    <com.google.android.material.chip.Chip
        ..
        android:checkable="true"/>

.kt

binding.chipGroup.setOnCheckedChangeListener { chipGroup, i -> 

}
binding.firstChip.isChecked = true   //default

GL

El oyente Chip Click solo funcionará si la selección única se estableció como verdadera en chipGroup.

app:singleSelection="true"

Si está utilizando el estilo que se muestra a continuación, asegúrese de que también se le haya asignado a cada ficha individual.


como esto:

<com.google.android.material.chip.ChipGroup
                android:
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="10dp"
                android:layout_marginEnd="10dp"
                app:singleSelection="true">

            <com.google.android.material.chip.Chip
                    android:
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/announcements"
                    android:textAppearance="@style/ChipThemeBold"/>
            <com.google.android.material.chip.Chip
                    android:
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/fyi"
                    android:textAppearance="@style/ChipThemeBold"/>
            <com.google.android.material.chip.Chip
                    android:
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/heartbeat"
                    android:textAppearance="@style/ChipThemeBold"  />
            <com.google.android.material.chip.Chip
                    android:
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/pitch"
                    android:textAppearance="@style/ChipThemeBold"  />
            <com.google.android.material.chip.Chip
                    android:
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/question"
                    android:textAppearance="@style/ChipThemeBold" 
                    android:layout_marginEnd="15dp" />

        </com.google.android.material.chip.ChipGroup>
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *