listview拖动侦听器适用于布局中的所有视图

时间:2015-01-28 22:15:13

标签: android listview drag-and-drop

我有一个应用程序使用this库作为拖放活动来重新排序项目。 我调整了项目布局,使其有两个图像和文本(而不是一个图像和文本),然后我将他们点击的图像移动到最右边。我的问题是现在第一个图像有拖拉侦听器附加到它。 (如果我先放置文本然后再将两个图像放在第二位,则监听器仅应用于文本)。有没有办法可以选择哪个元素具有拖动侦听器,或者让所有元素都有它。

它似乎只是将它赋予布局的第一个孩子。我试图将所有三个视图放在一个线性布局中,希望线性布局会有听众,但它只是绕过了那个并转到了该布局的第一个元素。

1 个答案:

答案 0 :(得分:0)

好的,我找到了。我尝试首先放置一个不可见的图像,拉伸整个视图的宽度,但它仍然只应用于视图的左侧部分。

然后我做了一些挖掘,并在DragNDropListView.java文件中找到了这段代码

@Override
public boolean onTouchEvent(MotionEvent ev) {
    final int action = ev.getAction();
    final int x = (int) ev.getX();
    final int y = (int) ev.getY();  

    if (action == MotionEvent.ACTION_DOWN && x < this.getWidth()/4) {
        mDragMode = true;
    }
    ...
}

只需将this.getWidth()/4更改为this.getWidth()即可使用整个视图而不是前1/4

编辑:不执行此操作您要重新排序的列表不适合屏幕,如果使用整个宽度,则无法向下滚动列表