При перетаскивании прослушивателя несколько операторов IF


Я делаю букву Drag n Drop game (вроде Угадай бренд), где у вас есть изображение, и вы должны перетащить Буквы в макеты, чтобы сформировать правильный ответ.

В верхней части у меня есть четыре макета (layoutAnsw от A до D), а в нижней части у меня есть четыре кнопки (btnTop A - D) У меня Онтоухлистенер и Ондраглистенер работают нормально, за исключением одной вещи.

Что происходит, когда у меня есть более одного похожего символа (буквы)? Например в этом изображение: Введите описание изображения здесь

Как вы можете видеть, у меня есть буквы" А", которые нужно перетащить, и я хочу сделать это независимо от того, какой из них вы ставите первым. В моем коде мне удалось получить что-то вроде этого:

"Если первый а находится в первом пространстве, то второй а переходит во второе пространство"

Я пытаюсь кодировать наоборот, включая это предыдущее утверждение. Мой код до сих пор позволяет вам поставить любую букву " А " в любом пространстве, включая 2 буквы в том же пространстве. Довольно бесполезный.

Мой код так далеко

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

Моя реализация onTouch:

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

Моя реализация onDrag:

@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();
}
1 2

1 ответ:

После долгого чтения я наткнулся на невероятно простую строку:

getChildCount() 

Используйте это как условие, в любое время, когда уже есть другое представление, оно просто вернет false

int i = container.getChildCount();
if (i < 1) {
// Do Something
} else if (i == 1) {
return false;
}