listview 拖动监听器应用于布局中的所有视图

listview drag listener apply to all views in layout

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

好像只是给布局的第一个child。我试图将所有三个视图都放在一个线性布局中,希望线性布局会有监听器,但它只是绕过了它并转到了该布局的第一个元素。

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

然后我又做了一些挖掘,在 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

编辑:不要这样做如果您正在重新排序的列表不适合屏幕,如果使用了整个宽度,您将无法向下滚动列表