Frage

Im Versuch, eine Aktivität zu implementieren, die ExpandableListView verwendet, und ich habe so weit gekommen, aber jetzt habe ich ein seltsames Verhalten gefunden.

ist meine Aktivität auf Rekordnahrungsaufnahme bedeutet, wie vom Benutzer angegeben. sie haben eine Auswahl an Menüs (Frühstück, Mittagessen und Abendessen - die äußere Gruppe), die erweitern ihren Inhalt zu zeigen. wenn ein Benutzer klickt auf einem inneren Menüpunkt ein Dialog sich für die Menge scheint zu fragen. sobald sie eine Menge und entlässt den Dialog der Text auf den Menüpunkt Änderungen widerzuspiegeln, die Menge dieses Elements eingeben, die verbraucht wurde Bild 1

Das Bild oben zeigt die Liste in einem geschlossenen Zustand.

unten ist die Liste, nachdem ich das Mittagsmenü und klickte auf ‚Kartoffelchips‘ geöffnet haben, und gibt eine Menge von 1. Wie Sie die ‚Kartoffel‘ sehen Neuertext nun geändert wurde, um die Menge von 1 zu reflektieren.

Bild 2

Der seltsame Teil geschieht jetzt. wenn ich auf ‚Lunch‘ und schließen Sie die Liste und klicken Sie dann auf es wieder es wieder zu öffnen, der ‚Menge X 1‘ Text auf einem anderen Punkt springt (Milch)

alt text

jedes Mal, wenn ich öffnen und schließen Sie die Liste hin und her zwischen den beiden Positionen springt. Auch wenn ich andere Gegenstände, wie zum Beispiel Frühstück öffnen, finde ich, dass auch sie haben jetzt bekommen Elemente mit ‚Menge X 1‘, obwohl ich havent geklickt sie.

Die Bits des Codes, die relevant sind, sind als solche:

Die XML für ein untergeordnetes Element:

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

Der Code, das ist ausgelöst auf ein untergeordnetes Element klicken:

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

Der obige Code öffnet sich ein Dialog, akzeptiert einen Wert für Menge, fügt das Listenelement um dies zu berücksichtigen, spart auch zur Datenbank und setzt einen Textview mit dem gewählten Artikel und Menge.

Leider nur eine ganze Menge Code-Dump, aber das hat mich ratlos und hoffentlich jemand helfen können.

Danke

Kevin

War es hilfreich?

Lösung

Ich glaube nicht, das Problem mit den Dialogen ist. Ich hatte das gleiche Problem in meinem Projekt und konnte es nicht reparieren. Ich denke, die ExpandableListView einen Fehler hat, wenn Kinder zu öffnen. Ich hatte nur ein Kind pro Gruppe, und wenn ich eine Gruppe erweitern, das Kind bewegt sich in eine andere Gruppe. Nach der Prüfung fand ich heraus, dass, wenn ich erweitere die Kinder erneut geladen werden.

Andere Tipps

Android wieder verwendet Dialoge. Also das Verhalten, das Sie sehen, könnte eine Folge davon sein. Sie könnten eine Aktivität verwaltet Dialog und Verwendung onPrepareDialog () Dialoginhalte zu aktualisieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top