【问题标题】:Collapse all group except selected group in expandable listview android在可扩展列表视图android中折叠除选定组之外的所有组
【发布时间】:2013-07-09 07:11:35
【问题描述】:

我正在使用可扩展列表视图开发 android 应用程序。实际上我需要的是,我正在列出包含孩子的组。

如果我选择了一个不可展开的组,它应该展开,在我选择第二个组之后,第一个组应该被折叠。我做了谷歌,但我找不到我想要的。请帮帮我。

【问题讨论】:

    标签: android expandablelistview expand collapse


    【解决方案1】:

    使用此代码将起作用

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

    【讨论】:

    • 但在这种情况下,它失去了对当前组的关注..请帮助我
    • 这行int previousItem = -1;需要放在方法外。或者previousItem每次都会被重置(后面这条指令消失:previousItem = groupPosition;
    • 这个方法有缺陷。它不会像没有调用 collapseGroup 那样滚动到展开组的顶部。当展开的组低于折叠的组时就是这种情况。如果旧组未折叠,视图将滚动到展开组所在的位置。知道如何解决吗?
    • @Dark.Rider 我遇到了同样的问题。你解决了吗?
    【解决方案2】:
    @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;
        }
    

    【讨论】:

    • 方法名拼写错误,没有超级AFAICT。
    【解决方案3】:

    将当前展开的组位置存储在一个变量中。在 onGroupExpanded 中执行以下操作。

    private int lastExpandedPosition = -1;
    private ExpandableListView lv; //your expandable listview
    ...
    
    lv.setOnGroupExpandListener(new OnGroupExpandListener() {
    
        @Override
        public void onGroupExpand(int groupPosition) {
                if (lastExpandedPosition != -1
                        && groupPosition != lastExpandedPosition) {
                    lv.collapseGroup(lastExpandedPosition);
                }
                lastExpandedPosition = groupPosition;
        }
    });
    

    【讨论】:

    • 你好 user936414,我给你第 100 个声望点感觉很好。感谢您的回答。
    • 如果 ExpandableListView 有 2 个以上的组,它不会关闭所有组
    • @HassanTareq 由于expandableListView 默认情况下没有打开其组,您可以通过折叠之前打开的组来获得所需的工作。
    • @user936414 这使expandablelstview 滚动到展开组的末尾或中间。有什么解决办法吗?
    • 嗨,我如何在自定义列表视图上实现上述代码,其中子组作为相对布局
    【解决方案4】:

    我也遇到了同样的问题。但我可以通过以下代码解决我的问题:

    因为我的可扩展列表中有 4 个标题,基于我这样写的

    expListView.setOnGroupExpandListener(new OnGroupExpandListener() {
    
                @Override
                public void onGroupExpand(int groupPos) {
                    // TODO Auto-generated method stub
                    expListView.collapseGroup(groupPos+1);
                    expListView.collapseGroup(groupPos-1);
                    expListView.collapseGroup(groupPos-2);
                    expListView.collapseGroup(groupPos+2);
                    expListView.collapseGroup(groupPos+3);
                    expListView.collapseGroup(groupPos-3);
                }
            });`
    

    【讨论】:

      【解决方案5】:
         elstListView1.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
              @Override
              public void onGroupExpand(int groupPosition) {
                  for(int i=0;i<listDataHeader.size();i++){
                      if(i==groupPosition){
                          //do nothing}
                          else{
                              elstListView1.collapseGroup(i);
                          }
                      }
                  }
              });
      

      【讨论】:

        【解决方案6】:

        试着把它放在你的 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;
            }
        

        【讨论】:

          【解决方案7】:

          获取ExpendableListView,然后覆盖下面的方法——setOnGroupExpandListener

          expandableListView = (ExpandableListView) findViewById(R.id.exp_listview);
          
          expandableListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
                  int previousItem = -1;
          
                  @Override
                  public void onGroupExpand(int groupPosition) {
                      if (groupPosition != previousItem)
                          expandableListView.collapseGroup(previousItem);
                      previousItem = groupPosition;
                  }
              });
          

          【讨论】:

            【解决方案8】:

            如果 ExpandableListView 有 2 个以上的组:

            expandableListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
                @Override
                public void onGroupExpand(int groupPosition) {
                    for (int g = 0; g < expandableListAdapter.getGroupCount(); g++) {
                        if (g != groupPosition) {
                            expandableListView.collapseGroup(g);
                        }
                    }
                }
            });    
            

            它将折叠除单击的组之外的所有组。

            【讨论】:

            • 在可展开的列表视图中没有像getGroupCount()这样的方法吗??
            • 如果你真的仔细看,你可以看到方法在适配器上
            猜你喜欢
            • 2014-03-02
            • 2011-03-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多