2014-10-02 61 views
0

对此进行了几天研究之后,我发布了我的问题,希望您能够帮助我。 我正在使用ExpandableListView和CursorTreeAdapter来显示数据库中的数据。该组的数据显示没有问题。当我展开一个组来展示孩子时,我会上下滚动,孩子们的数据会发生变化。例如父母A,B,C有一个孩子,每个孩子都有数据A1,B1和C1。当我展开父A和C并向上和向下滚动时,A1数据更改(大多数情况下为B1数据)。只有当我崩溃C的温度将A1数据为母公司A.带CursorTreeAdapter的ExpandableListView当滚动上下时展开扩展组更改

子布局

你可以建议,为什么它是happenning,什么可以做再一次说明了什么?

下面是从newGroupView,bindGroupView,newChildView,bindChildView我CursorTreeAdapter代码:

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

回调函数来管理的展开/收起组:

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

我希望这会帮助你。

相关问题