【问题标题】:Toggle groups in expandable listview在可展开的列表视图中切换组
【发布时间】:2014-05-23 14:56:18
【问题描述】:

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

目前我的列表视图中只有 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;
     }
 });

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

但如果我此时改变方向,第二组会展开。

为什么会这样?

【问题讨论】:

  • 有点不相干,ExpandableListView.expandGroup()的参数是int,但是为什么selectedGroupPosition是String呢?
  • 试试这个 SO 答案 [stackoverflow.com/a/4315162/2083078].这是一个非常简单优雅的解决方案。

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    试试这个(添加了两个 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;
         }
     });
    

    【讨论】:

    • @LalitPoptani 添加了 parent.expandGroup()
    • 抱歉,这会在每个父项下创建一组额外的子项
    猜你喜欢
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多