我已经问过这个问题,但没有成功。所以我再问一次(顺便说一句抱歉)。
我仍然有这个问题:
How to access items inside ExpandableListView?
让我继续。我的应用程序中有此情况:
android - 如何在ExpandableListView中选择子项?-LMLPHP
我想对第二组的2dn项执行performclick()。
目前我所能做的就是使用以下代码行使用performclick()扩展第二个组:

 mGattServicesList.performItemClick(mGattServicesList.getChildAt(1), 1, mGattServicesList.getItemIdAtPosition(1));

知道
private ExpandableListView mGattServicesList;

对组中的项执行performclick()不是很简单吗?
我想这么做是因为我有一个像
private final ExpandableListView.OnChildClickListener servicesListClickListner =
        new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
                                        int childPosition, long id) {

但我不想自己单击该项,也找不到在该组中选择此特定项的方法。
提前谢谢你

最佳答案

首先,ExpandableListView支持一种简单的方法来扩展您需要的组:

mGattServicesList.expandGroup(groupPosition);

以编程方式单击某个项有点棘手。您使用performItemClick()方法的方向是正确的,但是您对如何使用它有点不太了解。我假设你没有使用标题。这使事情更加复杂。
首先,您需要获取要单击的视图。奇怪的是,这不是一个要求。您可以使用空视图安全地调用performItemClick()。唯一的缺点是,您的子click listener也将收到一个空视图。
//First we need to pack the child's two position identifiers
long packedPos = ExpandableListView.getPackedPositionForChild(int groupPosition, int childPosition);

//Then we convert to a flat position to use with certain ListView methods
int flatPos = mGattServicesList.getFlatListPosition(packedPos);

//Now adjust the position based on how far the user has scrolled the list.
int adjustedPos = flatPos - mGattServicesList.getFirstVisiblePosition();

//If all is well, the adjustedPos should never be < 0
View childToClick = mGattServicesList.getChildAt(adjustedPos);

现在我们需要输入到performItemclick()的位置和id。您将看到这些步骤类似于检索视图。所以说真的,你不必再把它打出来了…但是要显示你需要什么:
//You can just reuse the same variables used above to find the View
long packedPos = ExpandableListView.getPackedPositionForChild(int groupPosition, int childPosition);
int flatPos = mGattServicesList.getFlatListPosition(packedPos);

//Getting the ID for our child
long id = mGattServicesList.getExpandableListAdapter().getChildId(groupPosition, childPosition);

最后,您可以调用performItemClick()
performItemClick(childToClick, flatPos, id);

首先,我没有对照ide检查这段代码,因此可能会有一些语法错误阻止编译。但总而言之,不幸的是,在以编程方式单击子视图时,应该传达出不那么容易的步骤。
最后一点,你提供的图片显示组和子计数从1开始。请注意,它们实际上被视为零基位置。因此第一个组位于位置0,每个组的第一个子组位于位置0。

08-06 08:39