Pregunta

Estoy tratando de poner en práctica una actividad que utiliza ExpandableListView y he conseguido hasta ahora, pero ahora he encontrado un comportamiento extraño.

Mi actividad está destinado a la ingesta de alimentos sin precedentes 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 su contenido. cuando un usuario hace clic en un elemento del menú interno un cuadro de diálogo que aparece pidiendo la cant. una vez que entran en una cant y cerrar el diálogo del texto en las opción de menú cambia para reflejar la cantidad de ese elemento que se ha consumido fig 1

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

a continuación es la lista después de haber abierto el menú de almuerzo y hecho clic en 'papas fritas' y que indica una cantidad de 1. Como puede ver la 'patata' itemText ahora se ha cambiado para reflejar el Cant de 1.

fig 2

Lo extraño sucede ahora. si hago clic en y 'almuerzo' y cerca de la lista a continuación, haga clic en él de nuevo volver a abrirlo, el 'Cant X 1' texto ha saltado a otro elemento (leche)

text alt

cada vez que abren y cierran la lista salta hacia atrás y adelante entre los dos elementos. Además, si abro otros elementos, como el desayuno, me parece que ellos también tienen elementos ya conseguido con 'Cant X 1' a pesar de que no he hecho clic ellas.

Los bits de código que son relevantes son como tal:

El XML para un elemento secundario:

<?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>

Los códigos activados eso 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 se abre un cuadro de diálogo, acepta un valor de cantidad, añade el elemento de la lista para reflejar esto, también se guarda en la base de datos y establece un TextView con el artículo y cantidad seleccionada.

Lo sentimos simplemente volcar toda una carga de código, pero esto me tiene perplejo y es de esperar que alguien pueda ayudar.

Gracias

Kevin

¿Fue útil?

Solución

No creo que el problema está en los cuadros de diálogo. Yo tenía el mismo problema en mi proyecto y no podía solucionarlo. Creo que el ExpandableListView tiene un error al abrir los niños. Yo tenía un solo hijo por grupo y cuando amplío un grupo, el niño se mueve a otro grupo. Después de las pruebas, descubrí que cuando se expanden los niños se vuelven a cargar.

Otros consejos

Android vuelve a utilizar los cuadros de diálogo. Por lo que el comportamiento que está viendo podría ser el resultado de ello. Se puede usar un diálogo de gestión y el uso onPrepareDialog () para actualizar el contenido de diálogo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top