标识已在expandableListView中单击的组

时间:2011-04-27 14:53:10

标签: android expandablelistview

我正在尝试识别已在expandableListView中单击的视图。当我设置OnItemLongClickListener时,我得到一个参数,向我显示列表中单击视图的位置。但是,它也会计算儿童观点。我希望它只计算群组,所以当点击一个群组时,我可以确定它是哪一个。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:6)

不,long参数不是打包值,这是适配器生成的ID(getCombinedChildId())。尝试解释ID,即使您以某种方式生成它也不是一个好主意。 Id是一个id。

我认为正确的方法是使用ExpandableListView.getExpandableListPosition(flatPos)方法。实际上,传递给侦听器的“pos”参数是平面列表位置。 getExpandableListPosition()方法返回打包位置,然后可以使用ExpandableListView的静态方法将其解码为单独的组和子位置。

我今天遇到了这个问题所以我正在描述我找到的为我工作的解决方案。

答案 1 :(得分:2)

long id方法传递的onItemLongLongClick参数是打包值。 您可以使用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;
    }
}