在可扩展列表视图中切换组

时间:2014-05-23 14:56:18

标签: android android-listview expandablelistview android-orientation expandablelistadapter

我正在构建一个可扩展的列表视图,我希望一次只扩展一个组。

目前我的列表视图中只有2组。当用户点击一个组时,另一个应该崩溃,反之亦然。此外,在方向更改期间应保留相同的内容。

活动类:

private String selectedGroupPosition = null;

方向更改:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
   super.onConfigurationChanged(newConfig);
   initUI();            
}

initUI():

if(selectedGroupPosition!=null) {           
   expListView.expandGroup(Integer.parseInt(selectedGroupPosition));
}

........

expListView.setOnGroupClickListener(new OnGroupClickListener() {
     @Override
     public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
        parent.smoothScrollToPosition(groupPosition);

        if (groupPosition==0) {
           if(parent.isGroupExpanded(1))
              parent.collapseGroup(1);
        } 
        else if (groupPosition==1) {
            if(parent.isGroupExpanded(0))
              parent.collapseGroup(0);
        }

         selectedGroupPosition = ""+groupPosition;
         return false;
     }
 });

但是,此代码似乎不起作用。当我点击第一组时,它会扩展。接下来,当我点击第二组时,第一组崩溃但第二组没有展开。 (它只会在随后的点击中扩展)

但如果我在这个时间点进行方向改变,第二组会扩大。

为什么会这样?

2 个答案:

答案 0 :(得分:3)

没有开箱即用的东西,但你可以很容易地自己构建它。您需要添加侦听器以折叠先前打开的组:

expListView.setOnGroupExpandListener( new OnGroupExpandListener() {
  int previousGroup = -1;

  @Override public void onGroupExpand( int groupPosition ) {
    if( groupPosition != previousGroup ) expListView.collapseGroup( previousGroup );
    previousGroup = groupPosition;
  }
} );

答案 1 :(得分:0)

试试这个(添加了两个parent.expandGroup()语句)

expListView.setOnGroupClickListener(new OnGroupClickListener() {
     @Override
     public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
        if (groupPosition==0) {
           if(parent.isGroupExpanded(1))
              parent.collapseGroup(1);

           parent.expandGroup(0);
        } 
        else if (groupPosition==1) {
            if(parent.isGroupExpanded(0))
              parent.collapseGroup(0);

            parent.expandGroup(1);
        }

        parent.smoothScrollToPosition(groupPosition);

         selectedGroupPosition = ""+groupPosition;
         return false;
     }
 });