Comportamiento extraño en Expandablelistview - Android

Estoy tratando de implementar una actividad que usa ExpandableListView y he llegado hasta ahora, pero ahora he encontrado un comportamiento extraño.

Mi actividad está destinada a registrar la ingesta de alimentos según lo especificado por el usuario. tienen una selección de menús (desayuno, almuerzo y cena, el grupo externo) que se expanden para mostrar sus contenidos. cuando un usuario hace clic en un elemento del menú interno, aparece un cuadro de diálogo pidiéndole la cantidad. una vez que ingresan una cantidad y cierran el cuadro de diálogo, el texto en el elemento del menú cambia para reflejar la cantidad de ese elemento que se ha consumido

La imagen de arriba muestra la lista en un estado cerrado.

a continuación se muestra la lista después de abrir el menú del almuerzo y hacer clic en 'Papas fritas' e indicar una Cantidad de 1. Como puede ver, el texto del elemento 'Patata' ahora se ha cambiado para reflejar la Cantidad de 1.

Lo extraño sucede ahora. si hago clic en 'Almuerzo' y cierro la lista y luego vuelvo a hacer clic en ella para volver a abrirla, el texto 'Cantidad X 1' ha saltado a otro elemento (Leche)

Cada vez que abro y cierro la lista, salta de un lado a otro entre los dos elementos. Además, si abro otros artículos, como el desayuno, descubro que ellos también han recibido artículos con 'Cantidad X 1' a pesar de que no he hecho clic en ellos.

Los bits de código que son relevantes son los siguientes:

El XML para un elemento hijo:

<?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="50dip"

         android:textSize="14dip"
         android:textStyle="italic"
         android:layout_width="200dip"
         android:textColor="@color/black"
         android:layout_height="40dip"/>

    <TextView android:id="@+id/qty_display"
         android:text="-"
         android:textSize="14dip"
         android:textStyle="italic"
         android:layout_width="50dip"
         android:textColor="@color/black"
         android:layout_height="wrap_content"/>
</LinearLayout>

El código que se activa al hacer clic en un elemento secundario:

public boolean onChildClick(
            ExpandableListView parent, 
            View v, 
            int groupPosition,
            int childPosition,
            long id) {

           // open the dialog and inflate the buttons
     myDialog  = new Dialog(this);
  myDialog.setTitle("Food Item Qty");
  myDialog.setContentView(R.layout.food_intake_dialog);
  final Button ok = (Button)myDialog.findViewById(R.id.fi_ok_but);
     Button cancel = (Button)myDialog.findViewById(R.id.fi_cancel_but); 

     //the id for this item is stored as a hash key in a map (say, item_id01)
     String key = "item_id"+groupPosition+""+childPosition;
     current_selected_food_item_id = Integer.parseInt(itemMap.get(key));

       // inflate the textview that shows the qty for this item on the expandablelist
     barQty = (TextView) v.findViewById(R.id.qty_display);

        // set the ok button to record teh quantity on press
     ok.setOnClickListener(new OnClickListener() {
   public void onClick(View viewParam) {

                             //inflate the input box that receives quantity from user
    EditText fiQty = (EditText) myDialog.findViewById(R.id.fiQty);
    // get the quantity and append the text on hte list item
    String qty = fiQty.getText().toString();
    barQty.setText("Qty X "+qty);

                            //open the database and save state 
                FoodIntake.this.application.getFoodIntakeHelper().open();   
 FoodIntake.this.application.getFoodIntakeHelper().storeFoodIntakeLog(current_selected_food_item_id,qty,visit_id,remote_visit_id);
    String log = FoodIntake.this.application.getFoodIntakeHelper().getFoodIntakeLog(visit_id);
    FoodIntake.this.application.getFoodIntakeHelper().close();

                        //    append the main food intake list and close the dialog
                            list.setText("Food Intake Log:\n\n"+log);
    myDialog.cancel();
   }
     });

El código anterior abre un cuadro de diálogo, acepta un valor para la cantidad, agrega el elemento de la lista para reflejar esto, también guarda en la base de datos y establece una vista de texto con el artículo y la cantidad seleccionados.

Lamento simplemente volcar una carga completa de código, pero esto me tiene perplejo y espero que alguien pueda ayudar.

Gracias

Kevin

Respuestas a la pregunta(2)

Su respuesta a la pregunta