我已经问过这个问题,但没有成功。所以我再问一次(顺便说一句抱歉)。
我仍然有这个问题:
How to access items inside ExpandableListView?
让我继续。我的应用程序中有此情况:
我想对第二组的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。