2015-08-31 4 views
0

У меня есть несколько макетов; каждый из которых содержит TextView. Если пользователь перетащил TextView в другой TextView, я собираюсь выполнить метод swapFamily(), но он срабатывает несколько раз, в зависимости от количества семейств.OnDragListener срабатывает несколько раз?

FamilyItemLayout - это обычай LinearLayout с прикрепленным к нему атрибутом String и с добавлением и установкой add'tl для этого атрибута.

Однако, мой вопрос заключается в том, что

private class onDropFamily implements View.OnDragListener { 

    @Override 
    public boolean onDrag(View view, DragEvent event) { 

     TextView txtDragged = (TextView) event.getLocalState(); 
     TextView txtTarget = (TextView) view; 
     String familyDragged = ((FamilyItemLayout) txtDragged.getParent()).getFamily(); 
     String familyTarget = ((FamilyItemLayout) txtTarget.getParent()).getFamily(); 

     switch (event.getAction()) { 
      // Signals the start of a drag and drop operation. 
      case DragEvent.ACTION_DRAG_STARTED: 
       break; 
      // Signals to a View that the drag point has entered the bounding box of the View. 
      case DragEvent.ACTION_DRAG_ENTERED: 
       view.setBackgroundResource(R.mipmap.pill_sun); 
       break; 
      // Signals that the user has moved the drag shadow outside the bounding box of the View. 
      case DragEvent.ACTION_DRAG_EXITED: 
       view.setBackgroundResource(R.mipmap.pill_sky); 
       break; 
      // Signals to a View that the user has released the drag shadow, and the drag point is within the bounding box of the View. 
      case DragEvent.ACTION_DROP: 
       break; 
      // Signals to a View that the drag and drop operation has concluded. 
      case DragEvent.ACTION_DRAG_ENDED: 
       // Check if drag event was successful 
       if (dropEventHandled(event)) { 
        fixedPlan.swapFamily(familyDragged, familyTarget); 
       } 
       txtDragged.setVisibility(View.VISIBLE); 
       txtTarget.setBackgroundResource(R.mipmap.pill_sky); 
       break; 
     } 
     return true; 
    } 

    private boolean dropEventHandled(DragEvent dragEvent) { 
     return dragEvent.getResult(); 
    } 
} 

ответ

0

Я считаю, что вы должны поместить эти символы в ACTION_DROP вместо ACTION_DRAG_ENDED

http://developer.android.com/reference/android/view/DragEvent.html

Все взгляды, которые получили событие ACTION_DRAG_STARTED получит событие ACTION_DRAG_ENDED, даже если они в настоящее время не видны, когда тянуть концы.

Также не забудьте вернуть правильное значение для ACTION_DROP

Взгляда должен вернуть истину от своего onDragEvent (DragEvent) обработчика или OnDragListener.onDrag() слушателя, если он принял падение, и ложь, если он проигнорировал падение.

+0

Большое вам спасибо. Я волновался. Я должен был прочитать документацию более тщательно. –

+0

Добро пожаловать. Это переполнение стека. –

Смежные вопросы