如何实现ExpandableListView
中只展开一个子项?也就是说,如果打开了第二个子项,则会关闭先前打开的子项。
如何实现ExpandableListView
中只展开一个子项?也就是说,如果打开了第二个子项,则会关闭先前打开的子项。
仅仅是为了确认bos在代码中的答案:
expandableList.setOnGroupExpandListener(new OnGroupExpandListener() {
int previousGroup = -1;
@Override
public void onGroupExpand(int groupPosition) {
if(groupPosition != previousGroup)
expandableList.collapseGroup(previousGroup);
previousGroup = groupPosition;
}
});
我不知道是否有任何自动方法可以实现此功能,但是您可以实现ExpandableListView.OnGroupClickListener
,其中您运行collapseGroup()
以折叠除正在单击的组外的所有列表组。 这将完成您想要的操作。
ExpandableListView.OnGroupExpandListener
类。另外,你可以跟踪上一个被展开的组,并在下一个组被展开时将其折叠(以防止在任意大量的列表项上调用 collapseGroup()
)。 - Jason LeBrun另外,你可以简单地使用FastAdapter中的withOnlyOneExpandedItem()
方法。
这个方法是由mikepenz开发的FastAdapter外部库提供的。
例如,我在我的抽屉中使用它。
drawer.getAdapter().withOnlyOneExpandedItem(true);
你可以根据需要在列表扩展中使用它来处理各种条件 -
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;
}
});
0
是一个有效的位置,所以当你开始时没有“前一组”,因此-1是正确的,而0是不正确的。 - Blundell