2016-07-19 3 views
0

Я попытался посмотреть на все google и SO, но не смог найти решение моей проблемы.Android CardView Drag and Drop ItemTouchHelper

В принципе, у меня есть RecyclerView с использованием CardViews, и я хочу разрешить Drag & Drop на этих картах. Swing работает отлично, но в ItemTouchHelper перетаскивание не работает. Я не уверен, почему, я указал правильные направления движения.

Я могу прокрутить влево и вправо для swipeDirs, но перемещение вверх и вниз не работает для dragDirs. Я не уверен, что проблема с эмулятором сама по себе не распознает «перетаскивает», потому что, если я присоединяю UP и DOWN к swipeDirs, я могу пронести по всем направлениям в качестве теста.

Я не получаю никаких визуальные Drag и падения рабочих

ItemTouchHelper.Callback scb = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT){ 
    @Override 
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target){ 
     //call back to adapter to swap positions, the Error is not with this line of code (at least not yet) 
     return true; 
    } 

    @Override 
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction){ 

    } 
}; 

ItemTouchHelper ith = new ItemTouchHelper(scb); 
ith.attachToRecyclerView(recyclerView); 

Любая помощь приветствуется, спасибо

ответ

2

Фигурные это, вам нужно Override onBindViewHolder в вашем адаптере

@Override 
public void onBindViewHolder(Adapter.ViewHolder holder, int position){ 
    final Adapter.ViewHolder xholder = holder; 
    holder.card.setOnTouchListener(new View.OnTouchListener(){ 
     @Override 
     public boolean onTouch(View view, MotionEvent event){ 
      if(MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) 
       listener.onStartDrag(xholder); 
      return false; 
     } 
    }); 
} 

А затем в вашем RecyclerList, содержащем ItemTouchHelper

@Override 
public void onStartDrag(ViewHolder holder){ 
    itemTouchHelper.startDrag(holder); 
}