android checkbox expandablelistview

Android ExpandableListView con una sola opción CheckBox en ChildView



(1)

Amigos,

Intento escribir un ExpandableListView que use casillas de selección de una sola opción en ChildView. Y no puedo entender cómo configurar otros CheckBoxes en "falso" en OnChildClickListener () de ExpandableListView. Aquí está mi código:

ExpListView.setOnChildClickListener(new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { CheckBox cb = (CheckBox) v.findViewById(R.id.checkbox); if (cb.isChecked()) { } else { cb.setChecked(true); //Here somehow I must set all other checkboxes to false. //Is it possible? } return false; } });

aquí está xml de ChildView:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:id="@+id/textChild" android:layout_width="wrap_content" android:layout_height="40dp" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:textColor="@android:color/white" android:layout_weight="1" /> <CheckBox android:id="@+id/checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="false" android:clickable="false" android:layout_gravity="right" android:visibility="visible" /> </LinearLayout>


Si solo desea poder seleccionar una casilla de verificación, puede guardar la casilla de verificación marcada en una casilla de verificación casilla CheckBox checkedBox; . Cuando se hace clic en una CheckBox verificación, puede hacer algo a lo largo de las líneas de

@Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { CheckBox last = checkedBox //Defined as a field in the adapter/fragment CheckBox current = (CheckBox) v.findViewById(R.id.checkbox); last.setCheked(false); //Unchecks previous, checks current current.setChecked(true); // and swaps the variable, making checkedBox = current; // the recently clicked `checkedBox` return false; }

Sin embargo, no estoy seguro si esto funcionará con el sistema de reciclaje de vista de Android, pero vale la pena intentarlo.

Si necesita opciones múltiples, puede expandir el checkedBox en un List<CheckBox> , y repetirlo cada vez que necesite desmarcar cuadros.

Si necesita almacenar algunos datos adicionales (que probablemente necesite), podría crear una clase de titular, por ej.

class CheckBoxHolder{ private CheckBox checkBox: private int id; public CheckBoxHolder(CheckBox cb, int id){ this.checkBox = cb; this.id = id; } // Getter and/or setter, etc. }