【问题标题】:Programmatically collapse a group in ExpandableListView以编程方式折叠 ExpandableListView 中的组
【发布时间】:2011-05-17 22:02:51
【问题描述】:

当我展开一个新组时,我可以折叠最后一个展开的组吗?

【问题讨论】:

    标签: android expandablelistview


    【解决方案1】:

    试着把它放在你的ExpandableListAdapter 中,listView 是对ExpandableListView 本身的引用。而lastExpandedGroupPosition 是在ExpandableListAdapter 中定义的整数成员变量。

        @Override
        public void onGroupExpanded(int groupPosition){
            //collapse the old expanded group, if not the same
            //as new group to expand
            if(groupPosition != lastExpandedGroupPosition){
                listView.collapseGroup(lastExpandedGroupPosition);
            }
    
            super.onGroupExpanded(groupPosition);           
            lastExpandedGroupPosition = groupPosition;
        }
    

    【讨论】:

    • 没问题。不久前为一个应用程序做了这个。很高兴它可以帮助别人。
    • 您的解决方案有问题:新展开的组将滚动到最后一个组(已关闭)的高度。不过还是谢谢。
    • 为了避免保留一个名为 lastExpandedGroupPosition 的实例变量,您可以简单地循环遍历整个列表索引,然后关闭所有不是正在扩展的新组。
    • @JohanS 是不是有点矫枉过正?为了防止保留一个 int,你需要遍历一个可能很大的列表
    【解决方案2】:

    非常有帮助,但正如Anh Tuan 在上面的 cmets 中提到的那样,我遇到了 ExpandableListView 的问题,它没有滚动回当前选定组的顶部(它将停留在当前滚动的位置,在某处的小组)。您还需要添加一个 onGroupClickListener() 以滚动到正确的位置:

    @Override
    public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition,
            long id) {
        // Implement this method to scroll to the correct position as this doesn't
        // happen automatically if we override onGroupExpand() as above
        parent.smoothScrollToPosition(groupPosition);
    
        // Need default behaviour here otherwise group does not get expanded/collapsed
        // on click
        if (parent.isGroupExpanded(groupPosition)) {
            parent.collapseGroup(groupPosition);
        } else {
            parent.expandGroup(groupPosition);
        }
    
        return true;
    }
    

    【讨论】:

    • 嘿 groupPosition 总是返回零,你能指导我吗
    • 尽管这在技术上可以解决问题,但它看起来并不漂亮。有什么建议让它看起来更好吗?
    • 好的,我正在回答我自己的问题。如果你调用 parent.setSelection(groupPosition) 它看起来好多了。请记住,它需要在组扩展或折叠逻辑之后调用,而不是之前。
    【解决方案3】:

    This 为我工作

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

    【讨论】:

      【解决方案4】:

      执行此操作以展开单击的组并折叠所有其他组

      public void onGroupExpand(int groupPosition)
      {
          for (int i = 0; i < len; i++)
          {
              if (i != groupPosition)
              {
                  expandableListDetailsLevel.collapseGroup(i);
              }
          }
      }
      

      它对我有用。

      【讨论】:

        【解决方案5】:
            @Override
            public void onGroupExpanded(int groupPosition) {
                for(int i=0;i<mGroupCollection.size();i++){
                    if(i==groupPosition){
                        System.out.println("Nothing");
                                 }
                    else{
                           mExpandableListView.collapseGroup(i);
                    }
        
                }
                super.onGroupExpanded(groupPosition);
            }
        

        【讨论】:

          猜你喜欢
          • 2012-07-01
          • 2016-03-22
          • 1970-01-01
          • 2015-11-18
          • 2022-12-09
          • 1970-01-01
          • 2020-03-27
          • 1970-01-01
          • 2015-08-19
          相关资源
          最近更新 更多