2016-04-06 20 views
0

Meine OnDrag-Methode scheint für jeden RecyclerView.ViewHolder aufgerufen werden, die in RecyclerView vorhanden ist. Kann jemand das verhindern und sicherstellen, dass es nur einmal angerufen wird?onDrag für jeden RecyclerView.ViewHolder aufgerufen

ViewHolder

public class ViewHolder extends RecyclerView.ViewHolder implements OnLongClickListener, OnDragListener { 
    public ImageView imgProduct; 
    public TextView lblName; 

    public ViewHolder(View view) { 
     super(view); 
     imgProduct = (ImageView)view.findViewById(R.id.imgShelfProduct); 
     imgProduct.setOnLongClickListener(this); 
     imgProduct.setOnDragListener(this); 
     lblName = (TextView) view.findViewById(R.id.lblShelfText); 
    } 

    @Override 
    public boolean onLongClick(View view) { 
     ClipData data = ClipData.newPlainText("product", view.toString()); 
     DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view); 
     view.startDrag(data, shadowBuilder, view, 0); 
     return false; 
    } 

    @Override 
    public boolean onDrag(View view, DragEvent event) { 
     switch (event.getAction()) { 
     case DragEvent.ACTION_DRAG_STARTED: 
      Log.d(ShoppingApplication.TAG, "Started"); 
      return true; 
     case DragEvent.ACTION_DRAG_ENTERED: 
      Log.d(ShoppingApplication.TAG, "Entered"); 
      return true; 
     case DragEvent.ACTION_DRAG_EXITED: 
      Log.d(ShoppingApplication.TAG, "Exited"); 
      return true; 
     case DragEvent.ACTION_DRAG_ENDED: 
      Log.d(ShoppingApplication.TAG, "Ended"); 
      return true; 
     default: 
      break; 
     } 
     return false; 
    } 
} 

onCreateViewHolder

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_shelf_product, parent, false); 
    return new ViewHolder(view); 
} 

onBindViewHolder

@Override 
public void onBindViewHolder(ViewHolder viewHolder, int position) { 
    Product product = products.get(position); 
    viewHolder.lblName.setText(product.getName()); 
    String url = app.getImagePath(); 
    Picasso.with(activity).load(url).into(viewHolder.imgProduct); 
} 
+1

Bitte machen Sie Ihre ViewHolder-Klasse statisch. – rmdroid

Antwort

0

I hav muss Das Konzept des OnDragListener wurde falsch verstanden. Es soll nicht zu den ziehbaren Ansichten hinzugefügt werden, sondern zu der Ansicht, auf die sie gezogen werden sollen. Also habe ich es aus der RecyclerView.Adapter-Klasse in die Activity-Klasse verschoben und meiner Zielansicht hinzugefügt.

Jetzt wird die onDrag-Methode nur einmal pro Trigger aufgerufen.