Auf Drag Listener mehrere IF-Anweisungen

Ich mache ein Buchstaben-Drag & Drop-Spiel (ähnlich wie "Errate die Marke"), in dem du ein Bild hast und die Buchstaben in Layouts ziehen musst, um die richtige Antwort zu erhalten.

Oben habe ich vier Layouts (layoutAnsw A bis D), und unten habe ich vier Schaltflächen (btnTop A bis D). Der OnTouchListener und der OnDragListener funktionieren einwandfrei, mit Ausnahme einer einzigen Sache.

Was passiert, wenn ich mehr als einen ähnlichen Buchstaben habe? Zum Beispiel in diesem Bild:

Wie Sie sehen, muss ich Buchstaben "A" schreiben, die gezogen werden müssen, und ich möchte es tun, unabhängig davon, welchen Sie zuerst setzen. In meinem Code habe ich so etwas bekommen:

"Wenn sich das erste A im ersten Feld befindet, geht das zweite A in das zweite Feld."

Ich versuche, andersherum zu codieren, einschließlich dieser vorherigen Anweisung. Mit meinem bisherigen Code können Sie ein beliebiges "A" in ein beliebiges Feld einfügen, einschließlich zweier Buchstaben im selben Feld. Ziemlich nutzlos.

Mein Code bisher

public class OneQuestionA extends Fragment implements OnTouchListener,
    OnDragListener {

protected static final String LOGCAT = null;
int numDragged = 0;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View rootView = inflater.inflate(R.layout.questions_fragment5,
            container, false);

    btnTopA.setOnTouchListener(this); // Letter A
    btnTopB.setOnTouchListener(this); // Second Letter A
    btnTopC.setOnTouchListener(this); 
    btnTopD.setOnTouchListener(this);

    rootView.findViewById(R.id.layoutAnswA).setOnDragListener(this); // Layout 1
    rootView.findViewById(R.id.layoutAnswB).setOnDragListener(this); // Layout 2
    rootView.findViewById(R.id.layoutAnswC).setOnDragListener(this); // Layout 3
    rootView.findViewById(R.id.layoutAnswD).setOnDragListener(this); // Layout 4
return rootView;
}

Meine onTouch-Implementierung:

 @Override
public boolean onTouch(View view, MotionEvent motionEvent) {
    // TODO Auto-generated method stub
    if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
        DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
        view.startDrag(null, shadowBuilder, view, 0);
        view.setVisibility(View.INVISIBLE);
        return true;
    }

    if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
        view.setVisibility(View.VISIBLE);
        return true;
    } else {
        return false;
    }
}

Meine onDrag-Implementierung:

@Override
public boolean onDrag(View v, DragEvent e) {

    int action = e.getAction();
    View view = (View) e.getLocalState();

    switch (action) {
    case DragEvent.ACTION_DRAG_STARTED:
        return true;
    case DragEvent.ACTION_DRAG_ENTERED:
        return false;
    case DragEvent.ACTION_DRAG_LOCATION:
        return false;
    case DragEvent.ACTION_DRAG_EXITED:
        return false;
    case DragEvent.ACTION_DROP:


        if (view.getId() == R.id.btnTopA && v.getId() == R.id.layoutAnswA) {
            ViewGroup owner = (ViewGroup) view.getParent();
            owner.removeView(view);
            LinearLayout container = (LinearLayout) v;
            container.addView(view);
            view.setVisibility(View.VISIBLE);
            view.setOnTouchListener(null);
            view.setOnDragListener(null);
            numDragged++;
        } else if (view.getId() == R.id.btnTopB && v.getId() == R.id.layoutAnswB) {
                ViewGroup owner = (ViewGroup) view.getParent();
            owner.removeView(view);
            LinearLayout container = (LinearLayout) v;
            container.addView(view);
            view.setVisibility(View.VISIBLE);
            view.setOnTouchListener(null);
            view.setOnDragListener(null);
            numDragged++;
            }
        } 





        if (numDragged >= 4) {
            numDragged = 0;

            Toast.makeText(getActivity(),
                    "All buttons in the Right place", Toast.LENGTH_SHORT)
                    .show();


        }

    case DragEvent.ACTION_DRAG_ENDED:
        if (dropEventNotHandled(e)) {
            view.setVisibility(View.VISIBLE);
        }
    }
    return false;
}

private boolean dropEventNotHandled(DragEvent e) {
    // TODO Auto-generated method stub
    return !e.getResult();
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage