Marque todas las casillas de verificación en ExpandableListView (Android)

Estoy utilizando ExpandableListView. Tanto en el grupo como en el niño, hay casillas de verificación. ¿Cómo hacer el siguiente requisito?

Cuando el usuario marque la casilla de verificación del grupo, marque todas las casillas de su hijo.

Creo que necesito sobrescribir el BaseExpandableListAdapter, pero no sé qué se debe completar. Gracias.

public View getGroupView(int groupPosition, boolean isExpanded, 
  View convertView, ViewGroup parent) 
{
    CheckBox cb = (CheckBox)v.findViewById(R.id.checkBox1);
    cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, 
          boolean isChecked) 
        {
            //Fill in what?
        }

    });

}

Hay una pregunta similar, pero no entiendo su solución: Cómo obtener la vista de todos los niños en grupo con ExpandableListView

preguntado el 27 de agosto de 11 a las 14:08

2 Respuestas

Creo que la respuesta vinculada dice que debe realizar un seguimiento del estado de sus grupos marcados en una lista de matriz. Entonces, en tu getChildView método para tu BaseExpandableListAdapter haría una verificación para ver si el grupo del niño está presente.

Aquí está mi implementación, estoy usando un mapa hash en lugar de una lista de matrices:

public View getChildView(int groupPosition, int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    CheckBox check__bookmark = (CheckBox) child_row.findViewById(R.id._checkBox);

    if (mapp.group_bookmark_s_checked.containsKey((groupPosition)) == true)                 
        check__bookmark.setChecked(true);
    else
        check__bookmark.setChecked(false);
}

public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {

    CheckBox PlayGroupSelected = 
                 (CheckBox) group_row.findViewById(R.id.bookmark_group_checkBox);        

    if (mapp.group_bookmark_s_checked.containsKey((groupPosition)) == true)                 
        PlayGroupSelected.setChecked(true);
    else
        PlayGroupSelected.setChecked(false);

    PlayGroupSelected.setOnCheckedChangeListener(
            new BookmarkGroupCheckedChangeListener(groupPosition, mapp, group_row));
}

Ahora, en su oyente, administra el estado eliminando y agregando a su objeto de estado. solía notifyDataSetChanged() porque los niños no se actualizaron una vez dibujados en el cambio de estado de verificación. No estoy seguro de si esa era la forma correcta de resolver ese problema, pero funcionó.

class BookmarkGroupCheckedChangeListener implements OnCheckedChangeListener  {

    private int mPosition;
    MyApplication mapp;
    RelativeLayout mgroup_row;


    BookmarkGroupCheckedChangeListener(int position, MyApplication app, RelativeLayout group_row) {
        mapp = app;
        mPosition = position;
        mgroup_row = group_row;
    }

    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

        if (isChecked == true) {
            mapp.group_bookmark_s_checked.put((mPosition), new Boolean(true));
            Log.v("DEBUG:", "Group Bookmark Checked On at " + mPosition);
            notifyDataSetChanged();
        } else if (mapp.group_bookmark_s_checked.containsKey(mPosition)) {
            mapp.group_bookmark_s_checked.remove((mPosition));
            Log.v("DEBUG:", "Checked Off at " + mPosition);
            notifyDataSetChanged();
        }

    }

}

Respondido 13 Jul 18, 23:07

Si. notificarDataSetChanged (); es importante. tanques - IndieBoy

Aquí hay un enlace:http://prativas.wordpress.com/category/android/expandable-list-view-in-android/ que contiene todo lo que necesitas. Simplemente revise el código y pruébelo.

Respondido 20 Feb 13, 08:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.