我已经问过这个问题,但没有成功。所以我再问一次(抱歉顺便说一句。)
我仍有这个问题:
How to access items inside ExpandableListView?。
让我恢复。我的应用程序中有这种情况:
我想在第二组的2dn项目上创建performClick()。 我现在所能做的就是使用这一行代码用performClick()扩展第二组:
mGattServicesList.performItemClick(mGattServicesList.getChildAt(1), 1, mGattServicesList.getItemIdAtPosition(1));
知道
private ExpandableListView mGattServicesList;
是否有一种非常简单的方法可以对组内的项目执行Click()?
我想这样做,因为我有一个像
这样的列表工具private final ExpandableListView.OnChildClickListener servicesListClickListner =
new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
int childPosition, long id) {
但我不想单独点击该项目,我也找不到在该组中选择此特定项目的方法。
提前谢谢
答案 0 :(得分:8)
首先,ExpandableListView
支持一种简单的方法来扩展您需要的群组:
mGattServicesList.expandGroup(groupPosition);
以编程方式单击某个项目有点棘手。您使用performItemClick()
方法进入了正确的轨道,但您对如何使用它有一点了解。我假设你没有使用标题。这进一步使事情复杂化。
首先,您需要获取要单击的视图。奇怪的是,这不是必需的。您可以使用null视图安全地调用performItemClick()
。唯一的缺点是你的孩子点击监听器也会收到一个空视图。
//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);
现在我们需要将位置和ID提供给performItemclick()
。您将看到步骤与检索视图类似。所以,真的,你不必再进一步打出这个......但要展示你需要的东西:
//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位。
答案 1 :(得分:0)
您无法为列表中的特定项目设置侦听器,但您可以执行所需的操作。只需检查groupPosition
和childPosition
是否是您想要的,然后执行操作(或其他适合其他项目的操作)
在ExpandableListView.OnChildClickListener
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
//groupPosition tells you what group the clicked child came from
//childPosition tells you what child was clicked
if (groupPosition == 2 && childPosition == 2) {
//so this code only executes if the 2nd child in the 2nd group is clicked
}
//you can ignore the other items or do something else when they are clicked
}