Android, casillas de verificación activadas / desactivadas aleatoriamente en la lista expandible

UtilizandoEste código de ejemplo de casilla de verificación Lista expandible Como referencia, estoy tratando de guardar y mantener el estado de la casilla de verificación. Sin embargo, las casillas de verificación aleatorias se están marcando y desactivando (activando miOnCheckedChangeListener con los nuevos valores) cuando los muevo fuera de la vista, minimizo su grupo, o incluso minimizo / maximizo un grupo cercano!

public Object getChild(int groupPosition, int childPosition) {
    return colors.get( groupPosition ).get( childPosition );
}

public long getChildId(int groupPosition, int childPosition) {
    return (long)( groupPosition*1024+childPosition );  // Max 1024 children per group
}

public View getChildView(final int groupPosition, final int childPosition, 
        boolean isLastChild, View convertView, ViewGroup parent) {

    View v = null;
    if( convertView != null ) {
        v = convertView;
    } else {
        v = inflater.inflate(R.layout.child_row, parent, false); 
    }

    Color c = (Color)getChild( groupPosition, childPosition );

    TextView color = (TextView)v.findViewById( R.id.childname );
    if( color != null ) {
        color.setText( c.getColor() );
    }

    TextView rgb = (TextView)v.findViewById( R.id.rgb );
    if( rgb != null ) {
        rgb.setText( c.getRgb() );
    }

    CheckBox cb = (CheckBox)v.findViewById( R.id.check1 );
    cb.setChecked( c.getState() );
    cb.setOnCheckedChangeListener(new OnCheckedChangeListener()
    {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
        {
            colors.get(groupPosition).get(childPosition).setState(isChecked);
            context.setColorBool(groupPosition, childPosition, isChecked);
            Log.d("ElistCBox2", "listitem position: " +groupPosition+"/"+childPosition+" "+isChecked);
        }
    });

    return v;
}

No sé qué parte del código podría ser responsable de esto, por lo que cualquier sugerencia sobre qué incluir aquí es bienvenida. Mi código solo difiere del original en mi intento de guardar los valores.

Respuestas a la pregunta(2)

Su respuesta a la pregunta