2014-10-02 1 views
0

После изучения этого в течение нескольких дней, я отправляю свой вопрос, надеясь, что вы сможете мне помочь. Я использую ExpandableListView с CursorTreeAdapter для отображения данных из базы данных, которую я имею. Данные для группы появляются без проблем. Когда я расширяю БОЛЬШЕ, когда одна группа показывает детям, а я прокручиваю вверх и вниз, данные детей меняются. например родители A, B, C имеют по одному ребенку с данными A1, B1 и C1. Когда я расширяю родительские A и C, а я прокручиваю вверх и вниз, данные A1 меняются (в большинстве случаев на данные B1). Только если я разрушаться C будет данные A1 показать еще раз для родительского А.ExpandableListView с дисплеем CursorTreeAdapter расширенных групповых изменений при прокрутке вверх и вниз

Ребенок макет

Можете ли вы посоветовать, почему он Происходило и что можно сделать?

Вот мой CursorTreeAdapter код из newGroupView, bindGroupView, newChildView, bindChildView:

public class MyCursorTreeAdapter extends CursorTreeAdapter { 

    String name = ""; 
    String phone = ""; 
    String cityStreet = ""; 
    String userNote2 = ""; 
    DBConnector values; 
    long id = 0; 
    DBConnector cmpDb; 
    LayoutInflater mInflater; 
    Context context; 
    int oldGroupPosition; 

    public MyCursorTreeAdapter(Context context, Cursor cursor) { 
     super(cursor, context); 
     this.context = context; 
     values = new DBConnector(context); 
     this.values = values; 
     cmpDb = new DBConnector(context); 
    } 

    @Override 
    public View newGroupView(Context context, Cursor cursor, boolean isExpanded, ViewGroup parent) { 
     final View view = mInflater.inflate(R.layout.group_list_view, parent, false); 
     return view; 
    } 

    @Override 
    public void bindGroupView(View view, Context context, Cursor cursor, boolean isExpanded) { 

     TextView textsubText1 = (TextView) view.findViewById(R.id.subText1); 
     TextView textsubText2 = (TextView) view.findViewById(R.id.subText2); 

     textsubText1.setText(cursor.getString(cursor.getColumnIndex(values.Name))); 
     textsubText2.setText(cursor.getString(cursor.getColumnIndex(values.Name))); 

     userNote2 = cursor.getString(cursor.getColumnIndex(values.Note2)); 
    } 

    @Override 
    public View newChildView(Context context, Cursor cursor, boolean isLastChild, ViewGroup parent) { 
     final View view = mInflater.inflate(R.layout.child_view, parent, false); 
     return view; 
    } 

    @Override 
    public void bindChildView(final View view, final Context context, final Cursor cursor, boolean isLastChild) { 
     values.open(); 
     TextView nameTv = (TextView) view.findViewById(R.id.tvName); 
     TextView phoneTv = (TextView) view.findViewById(R.id.tvPhone); 
     TextView addressTv = (TextView) view.findViewById(R.id.tvAddress); 

     ImageButton btData1 = (ImageButton) view.findViewById(R.id.btData1); 
     ImageButton btData2 = (ImageButton) view.findViewById(R.id.btData2); 
     ImageButton btSaveData = (ImageButton) view.findViewById(R.id.btSaveData); 

     extractDataFromUserNote2(); 

     nameTv.setText(""+ name); 
     phoneTv.setText(""+ phone); 
     addressTv.setText(""+ cityStreet); 

     android.view.View.OnClickListener doWithBtData1 = new Button.OnClickListener() { 
      @Override 
     public void onClick(View v) { 
       // action on btData1 
      } 
     }; 

     android.view.View.OnClickListener doWithBtData2 = new Button.OnClickListener() { 
      @Override 
     public void onClick(View v) { 
       // action on btData2 
      } 
     }; 


     android.view.View.OnClickListener doWithBtSaveData = new Button.OnClickListener() { 
      @Override 
     public void onClick(View v) { 
       // action on btSaveData 
      } 
     }; 

     btData1.setOnClickListener(doWithBtData1); 
     btData2.setOnClickListener(doWithBtData2); 
     btSaveData.setOnClickListener(doWithBtSaveData); 
     values.close(); 

    } 

    @Override 
    protected Cursor getChildrenCursor(Cursor groupCursor) { 
     return getCursor(); 
    } 

    @Override 
    public int getChildrenCount (int groupPosition) { 
     return 1; 
    } 

     @Override 
    public void onGroupCollapsed (int groupPosition) { 
    } 

    @Override 
    public void onGroupExpanded (int groupPosition) { 
    } 

    protected Cursor setChildrenCursor(Cursor groupCursor) { 
     return groupCursor; 
    } 

    @Override 
    public void setGroupCursor (Cursor cursor) { 

    } 

Спасибо.

ответ

1

Хорошо, после многих дней исследований мне удалось найти способ около эта проблема. Я добавил функцию обратного вызова OnScroll, которая сворачивает расширенную группу после прокрутки пользователя в списке.

Хотел бы я найти более элегантный способ, но он работает.

Вот код:

На главном списке параметров:

int previousItem = -1; 

функции обратного вызова:

elv.setOnScrollListener(new OnScrollListener() { 
    // This call back function close the group on scroll. It is used to override the but of view change. 
    @Override 
    public void onScrollStateChanged(AbsListView view, int scrollState) { 
     if (previousItem != -1 && scrollState == 1) { 
      elv.collapseGroup(previousItem); 
      previousItem = -1; 
     } 
    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
    } 
}); 

Спинка вызов функции для управления Expand/Collapse из группа:

elv.setOnGroupExpandListener(new OnGroupExpandListener() { 
    @Override 
    public void onGroupExpand(int groupPosition) { 
     if(groupPosition != previousItem) { 
      elv.collapseGroup(previousItem); 
     } 
     previousItem = groupPosition; 
    } 
}); 

Надеюсь, это поможет вам.

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