Android, zaznaczone pola wyboru losowo / odznaczone na liście rozwijalnej

Za pomocąten przykładowy kod wyboru listy rozwijalnej jako punkt odniesienia próbuję zapisać i zachować stan pola wyboru. Jednak losowe pola wyboru są sprawdzane i odznaczane (wyzwalanie myOnCheckedChangeListener z nowymi wartościami), gdy przewijam je poza zasięgiem wzroku, minimalizuję ich grupę, a nawet minimalizuję / maksymalizuję pobliską grupę!

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;
}

Nie wiem, jaki fragment kodu mógłby być za to odpowiedzialny, więc wszelkie sugestie dotyczące tego, co należy tutaj uwzględnić, są mile widziane. Mój kod różni się od oryginału tylko próbą zapisania wartości.

questionAnswers(2)

yourAnswerToTheQuestion