在可扩展列表视图android中折叠除选定组之外的所有组

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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()这样的方法吗?? 如果你真的仔细看,你可以看到方法在适配器上

以上是关于在可扩展列表视图android中折叠除选定组之外的所有组的主要内容,如果未能解决你的问题,请参考以下文章

当父母在Android中折叠时如何更改可扩展列表视图子项的视图?

如何在可扩展列表视图中绑定 Json 数据?

如何在可展开的列表视图中设置不同的组指示器图像?

Javascript手风琴 - 折叠除活动之外的所有打开实例

如何在expandablelistview中折叠组视图上方和下方的所有子视图?

当列表视图中的扩展器折叠时,无法让 WPF 列表视图折叠