一次只显示可展开列表中的一个子项

44

如何实现ExpandableListView中只展开一个子项?也就是说,如果打开了第二个子项,则会关闭先前打开的子项。

4个回答

142

仅仅是为了确认bos在代码中的答案:

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

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

太棒了...谢谢兄弟。 - Manjunath
完美的。谢谢。 - Pratik Butani
当用户组展开事件触发时,我们能否获得组视图? - bhavesh kaila
@Ahsan 不是的,因为在列表中0是一个有效的位置,所以当你开始时没有“前一组”,因此-1是正确的,而0是不正确的。 - Blundell
完美的答案。谢谢伙计。另外,我有一个问题,当展开特定的组时,视图会自动滚动到展开组的最后一个子项...如何使滚动状态停留在组而不是子项上?情况是这样的,如果子项有超过10个记录,并且超出了移动设备的高度,则屏幕会向下滚动到最后一个子项位置。@Blundell需要您的帮助。 - Anish Kumar
显示剩余2条评论

37

我不知道是否有任何自动方法可以实现此功能,但是您可以实现ExpandableListView.OnGroupClickListener,其中您运行collapseGroup()以折叠除正在单击的组外的所有列表组。 这将完成您想要的操作。


19
更好的办法是使用 ExpandableListView.OnGroupExpandListener 类。另外,你可以跟踪上一个被展开的组,并在下一个组被展开时将其折叠(以防止在任意大量的列表项上调用 collapseGroup())。 - Jason LeBrun
谢谢大家,今晚我会尝试你们的建议! - steve-gregory
3
我想跟进一下,这个建议完美地起作用了。我只需追踪最后一个已展开的组并在展开下一个要展开的组之前将其关闭!感谢 bos 和 Jason! - steve-gregory

0

另外,你可以简单地使用FastAdapter中的withOnlyOneExpandedItem()方法。

这个方法是由mikepenz开发的FastAdapter外部库提供的。

例如,我在我的抽屉中使用它。

drawer.getAdapter().withOnlyOneExpandedItem(true);

据我所知,ExpandableListView 中没有这样的方法。 - Inzimam Tariq IT
抱歉,我忘记了我正在阅读的源代码是用于外部库的,如果您对此感兴趣,这里是它的链接https://github.com/sathishmscict/FastAdapter/blob/master/library/src/main/java/com/mikepenz/fastadapter/FastAdapter.java - Dasser Basyouni

-5

你可以根据需要在列表扩展中使用它来处理各种条件 -

      expList.setOnChildClickListener(new OnChildClickListener() 
        {
         @Override
         public boolean onChildClick(ExpandableListView parent, View v,
           int childGroupPosition, int childPosition, long id) {

        // Log.e("OnChildClickListener", "OK "+childGroupPosition+"  "+childPosition);javainterviewquestion
             if(childGroupPosition ==0 && childPosition == 0)
             {

             }
             if(childGroupPosition ==0 && childPosition == 1)
             {

             } 

          return false; 
         }
        });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接