2016-07-19 14 views
0

Ich habe versucht, überall auf Google und SO, aber konnte keine Lösung für mein Problem finden.Android CardView Drag & Drop ItemTouchHelper

Grundsätzlich habe ich einen RecyclerView mit CardViews, und ich möchte Drag & Drop auf diese Kartenansichten erlauben. Swiping funktioniert einwandfrei, Drag & Drop funktioniert jedoch nicht im ItemTouchHelper. Ich bin mir nicht sicher warum, ich habe die richtigen Bewegungsrichtungen angegeben.

Ich kann für SwipeDirs nach links und rechts wischen, aber das Bewegen nach oben und unten funktioniert nicht für die DragDirs. Ich bin mir nicht sicher, ob es ein Problem mit dem Emulator selbst ist, der "schleift" nicht erkennt, denn wenn ich UP und DOWN an die swipeDirs anschließe, kann ich in jede Richtung als Test wischen.

Ich bin nicht immer alle Visuals von Drag & Drop-Arbeits

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

Jede Hilfe ist willkommen, Dank

Antwort

2

figured it out, müssen Sie in Ihrem Adapter außer Kraft setzen 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; 
     } 
    }); 
} 

Und dann in Ihrer RecyclerList mit dem ItemTouchHelper

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