Как заставить Android знать, какой вид перетаскивать - PullRequest
0 голосов
/ 12 апреля 2019

Мне нужно поменять imageButtons между 2 линейными раскладками, используя drag & drop.

Сначала я выбираю изображение с помощью длинного щелчка:

    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 (id = iButtonId1) в линейный макет (frame3), где iButtonId2 уже размещен:

    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;
    }
}

и работает нормально.

Но, как вы можете видеть, эти кнопки изображения жестко закодированы в ACTION_DROP. Это означает, что если существует много кнопок и макетов для изображений, куда их можно поместить, этот жесткий код превратится в кошмар.

Так, как я могу заменить эти жестко закодированные значения и дать системе знать, какое изображение будет отброшено а какое imageButton уже размещено в той же линейной раскладке?

P.S. если iButtonId1.getParent () заменен на view.getParent (), то Android не может найти родителя для нулевого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...