2

Я пытаюсь реализовать деятельность, которая использует ExpandableListView, и я дошел до сих пор, но теперь я нашел странное поведение.Странное поведение в Expandablelistview - Android

Моя деятельность предназначена для записи приема пищи, как указано пользователем. у них есть выбор меню (завтрак, обед и ужин - внешняя группа), которые расширяются, чтобы показать их содержимое. , когда пользователь нажимает на элемент внутреннего меню, появляется диалоговое окно с запросом на количество. после того, как они вводят число и отклоняют диалог, текст в пункте меню изменяется, чтобы отразить количество потребляемого товара. fig 1

Вышеупомянутое изображение отображает список в закрытом состоянии.

Ниже представлен список после того, как я открыл меню обеда и нажал на «Картофельные чипы» и указав количество 1. Как вы можете видеть, текст предмета «Картофель» теперь изменен, чтобы отразить значение Кол-во 1.

fig 2

Странная часть происходит сейчас. если я нажимаю на «обед» и закрыть список, а затем нажмите на него еще раз вновь открыв, текст в «Кол-во X 1» подскочило к другому пункту (Milk)

alt text

каждый раз, когда я открываю и закройте список, который он перескакивает между двумя пунктами. Кроме того, если я открываю другие предметы, такие как завтрак, я считаю, что они тоже получили предметы с «Qty X 1», хотя я и не нажал их.

Биты кода, которые имеют отношение как таковые:

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="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> 

В Thats код запускается по нажатию на дочерний элемент:

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

Вышеприведенный код открывает диалоговое окно, принимает значение для количества, добавляет элемент списка, чтобы отразить это, также сохраняет базу данных и устанавливает текстовое представление с выбранным элементом и количеством.

Извините, что просто свалил всю нагрузку кода, но это меня забило, и, надеюсь, кто-то может помочь.

Благодаря

Kevin

ответ

0

Я не думаю, что проблема связана с диалоговыми окнами. У меня была такая же проблема в моем проекте, и я не мог ее исправить. Я думаю, что ExpandableListView имеет ошибку при открытии детей. У меня был только один ребенок на группу, и когда я расширяю группу, ребенок переходит в другую группу. После тестирования я узнал, что при расширении дети перезагружаются.

1

Android повторно диалогах. Таким образом, поведение, которое вы видите, может быть результатом этого. Вы можете использовать диалог, управляемый действиями, и использовать onPrepareDialog() для обновления содержимого диалогового окна.

+0

Когда вы говорите, что диалоги повторного использования андроида, вы имеете в виду элементы списка? или вы имеете в виду фактический диалог, который используется для ввода количества элемента? Спасибо –

Смежные вопросы