Recyclerview拖放onTouch功能未被解雇

时间:2016-11-25 18:51:09

标签: android drag-and-drop android-recyclerview recycler-adapter

我一直在尝试按照本教程来实现拖放功能:https://medium.com/@ipaulpro/drag-and-swipe-with-recyclerview-b9456d2b1aaf#.ovb9pairq并遇到了一个问题,即从位置有时仍然触及。我没有找到一种方法来缩小有时在这里的原因,但它的发生频率要高得多。这导致我要么必须设置新适配器,要么单击其中一个UI元素来重置它并继续拖放操作。

我认为这些图片可能有助于澄清..在第二次通知中,即使我没有触摸UI项目,仍然选择了从位置。任何人都可以指出我正确的方向来理解为什么在拖放结束后触摸仍然存在?

初​​始

initial setup

将d拖入b的位置

After dragging d up to b position

适配器代码:

    viewHolder.itemView.setOnTouchListener(new View.OnTouchListener() {
  @Override
  public boolean onTouch(View v, MotionEvent event) {
  if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) {
  mDragStartListener.onStartDrag(viewHolder);
  }
  return false;
  }
});

@Override
public void onItemDismiss(int position) {
  this.dataset.remove(position);
  notifyItemRemoved(position);
  notifyItemRangeChanged(position, getItemCount());
  System.out.println(String.valueOf(this.dataset.size()) + " is my dataset size");
}

@Override
public boolean onItemMove(int fromPosition, int toPosition) {
  Collections.swap(this.dataset, fromPosition, toPosition);
  notifyItemMoved(fromPosition, toPosition);
  return true;
}

ViewHolder代码:

public ItemViewHolder(View v) {
  super(v);
  cardText = (TextView) v.findViewById(R.id.card_text);
cardView = (CardView) v.findViewById(R.id.card_view);
}

@Override
public void onItemSelected() {
  itemView.setBackgroundColor(Color.BLUE);
}

@Override
public void onItemClear() {
  itemView.setBackgroundColor(0);
}

0 个答案:

没有答案