如何让Android知道拖放哪个视图

时间:2019-04-11 22:34:10

标签: java android xml mobile drag-and-drop

我需要使用拖放功能在2个线性布局之间交换imageButtons。

首先,我通过长按选择一个imageButton:

    public boolean onLongClick(View v) {ClipData data = 
    ClipData.newPlainText("value", (CharSequence) v.getTag());
    v.startDrag(data, new DragShadowBuilder(v), null, 0);

    if (v == iButtonId1) {tempField.setTag("iButtonId1");}
    return true;
}

也是分配给tempField的标记,用于使用它删除以前长按的相同imageButton。

然后将那个imageButton(id = iButtonId1)放到已经放置iButtonId2的线性布局(frame3)中:

    class frame3DragListener implements View.OnDragListener {
    @Override
    public boolean onDrag(View v, DragEvent event) {

        int action = event.getAction();
        switch (action) {
            case DragEvent.ACTION_DRAG_STARTED:
                return true;

            case DragEvent.ACTION_DRAG_ENTERED:
                v.setBackgroundColor(Color.LTGRAY);
                return true;

            case DragEvent.ACTION_DRAG_LOCATION:
                return true;

            case DragEvent.ACTION_DRAG_EXITED:
                v.setBackgroundResource(R.mipmap.frame3);
                return true;

            case DragEvent.ACTION_DROP:
            if (tempField.getTag() == "iButtonId1") {
                            ViewGroup owner = (ViewGroup) 
                            iButtonId1.getParent();
                            owner.removeView(iButtonId1);

                            LinearLayout container = (LinearLayout) v;
                            container.removeView(iButtonId2);
                            owner.addView(iButtonId2);
                            container.addView(iButtonId1);
                        }}}}
                                            return true;

            case DragEvent.ACTION_DRAG_ENDED:
                return true;

            default:
                break;
        }
        return false;
    }
}

它工作正常。

但是正如您所看到的,这些imageButton在ACTION_DROP中进行了硬编码。 这意味着,如果有很多可以放在其中的imageButtons和布局,那么硬编码将变成噩梦。

那么我该如何替换那些硬编码的值并使系统知道要删除的imageButton 以及什么imageButton已经放置在相同的线性布局中?

P.S。如果将iButtonId1.getParent()替换为view.getParent(),则Android无法找到空对象的父级。

0 个答案:

没有答案