单击此行中的项目时,如何获取整个ListView行

时间:2014-11-08 15:40:39

标签: android android-listview drag

我有一个ExpandableListView,每行有四个元素。在这一行中,我在第一个项目上有一个TouchListener。现在,当我单击(并拖动)此项目时,我想要拖动整行,而不仅仅是第一个项目,并将背景可绘制设置为整行。

switch (motionEvent.getAction()) {
            case MotionEvent.ACTION_DOWN:

                View wholerow = view.getRootView().findViewById(R.id.dbtabellelistviewitem);
                wholerow.setBackgroundDrawable(view.getResources().getDrawable(R.drawable.circle));

                view.setBackgroundDrawable(view.getResources().getDrawable(R.drawable.square));
                ClipData data = ClipData.newPlainText("", "");
                View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
                view.startDrag(data, shadowBuilder, view, 0);


            case MotionEvent.ACTION_UP:
                view.setBackgroundDrawable(null);


        }
        return true;

但View wholerow只给了我列表的第一行。如何获取我点击的项目的整行?

提前致谢。

1 个答案:

答案 0 :(得分:1)

在您的情况下,我怀疑视图中创建的每一行都具有相同的ID(在布局中定义)。 FindViewById在找到合适的视图(具有正确的ID)后立即停止,它不会处理具有相同ID的视图。这就是为什么你的方法总会返回第一行的原因。

要检索父行,您需要使用getParent()手动浏览视图的父级

像这样的方法应该有效:

public View findParentWithId(View myView, int idParent) {
    if (myView.getParent() instanceof View) {
        View parent = (View) myView.getParent();
        if (parent.getId() == idParent) {
            return parent;
        } else {
            return findParentWithId(parent, idParent);
        }
    }

    return null;
}