안녕하세요.

ExpandableListView를 이용해서 리스트를 만들고 각 리스트에 체크 박스를 달았습니다.
그런데 체크박스의 체크가 그룹을 클릭하여 그룹 축소/확장 반복하면 child의 체크 된 내용이 유지가 되질 않고
자기 멋대로 변해버리는 현상이 있습니다.

어떻게 하면 체크박스의 체크 상태의 변화가 없게 할수 있을까요?

groupA
  = 11111 [ ]
  = 22222 [ ]

groupB
  = 33333 [ ]
  = 44444 [x]

체크 박스의 속성은 아래와 같이 주었습니다.

    <CheckBox android:id="@+id/check1"

           android:layout_width="wrap_content"

           android:layout_height="wrap_content" android:focusable="false"

           android:checked="false" />


제가 사용하고 있는 소스코드를 모두 올려 드리겠습니다.

import android.app.ExpandableListActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.ListView;

import android.widget.CheckBox;

import android.widget.ExpandableListView;

import android.widget.SimpleExpandableListAdapter;

import java.util.List;

import java.util.ArrayList;

import java.util.Map;

import java.util.HashMap;

import android.util.Log;


public class ElistCBox extends ExpandableListActivity

{

    private static final String LOG_TAG = "ElistCBox";


    static final String colors[] = {

  "grey",

  "blue",

  "yellow",

  "red"

};


static final String shades[][] = {

// Shades of grey

  {

"lightgrey","#D3D3D3",

"dimgray","#696969",

"sgi gray 92","#EAEAEA"

  },

// Shades of blue

  {

"dodgerblue 2","#1C86EE",

"steelblue 2","#5CACEE",

"powderblue","#B0E0E6"

  },

// Shades of yellow

  {

"yellow 1","#FFFF00",

"gold 1","#FFD700",

"darkgoldenrod 1"," #FFB90F"

  },

// Shades of red

  {

"indianred 1","#FF6A6A",

"firebrick 1","#FF3030",

"maroon","#800000"

  }

    };


    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle icicle)

    {

        super.onCreate(icicle);

        setContentView(R.layout.main);

SimpleExpandableListAdapter expListAdapter =

new SimpleExpandableListAdapter(

this,

createGroupList(), // groupData describes the first-level entries

R.layout.group_row, // Layout for the first-level entries

new String[] { "colorName" }, // Key in the groupData maps to display

new int[] { R.id.childname }, // Data under "colorName" key goes into this TextView

createChildList(), // childData describes second-level entries

R.layout.child_row, // Layout for second-level entries

new String[] { "shadeName""rgb" }, // Keys in childData maps to display

new int[] { R.id.childname, R.id.rgb } // Data under the keys above go into these TextViews

);

setListAdapter( expListAdapter );

    }


    public void  onContentChanged  () {

        super.onContentChanged();

        Log.d( LOG_TAG"onContentChanged" );

    }

    

    @Override

    public boolean onChildClick(

            ExpandableListView parent, 

            View v, 

            int groupPosition,

            int childPosition,

            long id) {

        Log.d( LOG_TAG"onChildClick: "+childPosition );

        CheckBox cb = (CheckBox)v.findViewById( R.id.check1 );

//        if( cb != null )

//            cb.toggle();

        return false;

    }


    public void  onGroupExpand  (int groupPosition) {

        Log.d( LOG_TAG,"onGroupExpand: "+groupPosition );

    }


/**

  * Creates the group list out of the colors[] array according to

  * the structure required by SimpleExpandableListAdapter. The resulting

  * List contains Maps. Each Map contains one entry with key "colorName" and

  * value of an entry in the colors[] array.

  */

private List createGroupList() {

  ArrayList result = new ArrayList();

  forint i = 0 ; i < colors.length ; ++i ) {

HashMap m = new HashMap();

    m.put( "colorName",colors[i] );

result.add( m );

  }

  return (List)result;

    }


/**

  * Creates the child list out of the shades[] array according to the

  * structure required by SimpleExpandableListAdapter. The resulting List

  * contains one list for each group. Each such second-level group contains

  * Maps. Each such Map contains two keys: "shadeName" is the name of the

  * shade and "rgb" is the RGB value for the shade.

  */

  private List createChildList() {

ArrayList result = new ArrayList();

forint i = 0 ; i < shades.length ; ++i ) {

// Second-level lists

  ArrayList secList = new ArrayList();

  forint n = 0 ; n < shades[i].length ; n += 2 ) {

    HashMap child = new HashMap();

child.put( "shadeName"shades[i][n] );

    child.put( "rgb"shades[i][n+1] );

secList.add( child );

  }

  result.add( secList );

}

return result;

  }


}



group_row.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="horizontal"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content">


    <TextView android:id="@+id/childname"

         android:paddingLeft="50px"

         android:textSize="14px"

         android:textStyle="italic"

         android:layout_width="150px"

         android:layout_height="wrap_content"/>


</LinearLayout>


child_row.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="horizontal"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content">


    <TextView android:id="@+id/childname"

         android:paddingLeft="50px"

         android:focusable="false"

         android:textSize="14px"

         android:textStyle="italic"

         android:layout_width="150px"

         android:layout_height="wrap_content"/>


    <TextView android:id="@+id/rgb"

         android:focusable="false"

         android:textSize="14px"

         android:textStyle="italic"

         android:layout_width="100px"

         android:layout_height="wrap_content"/>


    <CheckBox android:id="@+id/check1"

           android:layout_width="wrap_content"

           android:layout_height="wrap_content" android:focusable="false"/>


</LinearLayout>