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);
}
Bitte machen Sie Ihre ViewHolder-Klasse statisch. – rmdroid