我正在尝试识别在可扩展列表视图中被点击的视图。当我设置一个OnItemLongClickListener
时,我得到了一个参数,它显示了列表内被点击的视图位置。然而,它也计算了子视图。我希望它只计算组,这样当单击组时,我可以确定是哪个组。有什么办法可以做到这一点吗?
我正在尝试识别在可扩展列表视图中被点击的视图。当我设置一个OnItemLongClickListener
时,我得到了一个参数,它显示了列表内被点击的视图位置。然而,它也计算了子视图。我希望它只计算组,这样当单击组时,我可以确定是哪个组。有什么办法可以做到这一点吗?
getCombinedChildId()
)生成的ID。即使您以某种方式生成ID,试图解释ID也是一个坏主意。 ID就是一个ID。ExpandableListView.getExpandableListPosition(flatPos)
方法。传递给侦听器的“pos”参数实际上是平面列表位置。 getExpandableListPosition()
方法返回打包的位置,然后可以使用ExpandableListView
的静态方法将其解码为单独的组和子位置。onItemLongLongClick
方法传递的long id
参数是一个打包的值。
您可以使用ExpandableListView.getPackedPositionGroup(id)
检索组位置。
使用ExpandableListView.getPackedPositionChild(id)
获取子项位置。
如果Child == -1
,则长按事件发生在组上。
下面是一个示例监听器类,演示了如何解包id
。
private class expandableListLongClickListener implements AdapterView.OnItemLongClickListener {
public boolean onItemLongClick (AdapterView<?> p, View v, int pos, long id) {
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setTitle("Long Click Info");
String msg = "pos="+pos+" id="+id;
msg += "\ngroup=" + ExpandableListView.getPackedPositionGroup(id);
msg += "\nchild=" + ExpandableListView.getPackedPositionChild(id);
builder.setMessage(msg);
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) { }
} );
AlertDialog alert = builder.create();
alert.show();
return true;
}
}
ExpandableListView.getPackedPositionGroup(expListView.getExpandableListPosition(position))
。 - Rinaldi Segecin