将MotionEvent转换为position后,如何确定expandablelistview中引用了哪个列表项

时间:2012-12-16 01:48:27

标签: android expandablelistview gesturedetector

我有一个ExpandableListView,带有自定义适配器,在我的手势检测器中,我试图弄清楚如何找到手势选择的列表项。

class MyGestureDetector extends SimpleOnGestureListener {
    @Override
    public void onLongPress(MotionEvent e) {
        int itemnum = listView.pointToPosition((int) e.getX(), (int) e.getY());
        itemnum -= listView.getFirstVisiblePosition();

因此,如果itemnum = 7,则可能是

group A label
group B label
item B1
item B2
group C label
item C1
item C2
item C3 <== this is position 7, assuming group A label was still on the screen

因此,如果B组崩溃,那么itemnum 7将是C5或D1。

给定一个特定的位置编号,如何确定它所指的组位置和子位置?

如果我知道扩展了哪个组,那么我可以遍历,计算每个项目,但是如果列表已滚动,则不应计算先前的列表。

因此,如果MotionEvent上有ExpandableListView,我如何将其转换为所采取行动的View

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。不确定这是否是最佳方法。

    @Override
    public void onLongPress(MotionEvent e) {
        int itemnum = listView.pointToPosition((int) e.getX(), (int) e.getY());
                    int itemnum2 = itemnum - listView.getFirstVisiblePosition();
        View vi = listView.getChildAt(itemnum2);

所以这就是我获得观点的方式。

不幸的是,在我从上面的File检索TextView之后,为了找到子记录,在我的情况下是vi我必须循环:

                String filename = textView.getText().toString();
                int groupCount = mAdapter.getGroupCount();
                for(int t = 0; t < groupCount; t++) {
                        int childCount = mAdapter.getChildrenCount(t);
                        for(int y = 0; y < childCount; y++) {
                            File f = (File) mAdapter.getChild(t, y);
                            if (f.getName().equals(filename)) {
                            }
                        }
                }