Задача
Таким образом, у меня есть представление рециркулятора, заполненное представлениями карт, все с прикрепленными прослушивателями перетаскивания, события движения работают нормально, пока я не установлю представление, которое будет перетаскиваться, поэтому с закомментированной строкой это работает, все журналы печатаются отлично
holder.handleView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (MotionEventCompat.getActionMasked(event)){
case MotionEvent.ACTION_DOWN:
Log.d("Adptr" , "ACTION_DOWN");
holder.cardView.setCardElevation(context.getResources().getDimensionPixelSize(R.dimen.elevation_pressed));
//mDragStartListener.onStartDrag(holder);
return true;
case MotionEvent.ACTION_UP:
Log.d("Adptr" , "ACTION_UP");
holder.cardView.setCardElevation(context.getResources().getDimensionPixelSize(R.dimen.elevation));
break;
case MotionEvent.ACTION_CANCEL:
Log.d("Adptr" , "ACTION_CANCEL");
holder.cardView.setCardElevation(context.getResources().getDimensionPixelSize(R.dimen.elevation));
break;
}
return false;
}
});
но если я раскомментирую строку
mDragStartListener.onStartDrag(holder);
тогда ACTION_UP больше не вызывается, и я не понимаю, почему
слушатель интерфейса
public interface OnStartDragListener {
void onStartDrag(RecyclerView.ViewHolder viewHolder);
}
Я внедряю его в свою деятельность и передаю его адаптеру
@Override
public void onStartDrag(RecyclerView.ViewHolder viewHolder) {
mItemTouchHelper.startDrag(viewHolder);
}
Мой метод onMove это
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
RecyclerView.ViewHolder target) {
mAdapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());
return true;
}
и в моем адаптере у меня есть onItemMove из интерфейса
public interface ItemTouchHelperAdapter {
boolean onItemMove(int fromPosition, int toPosition);
void onItemDismiss(int position);
}
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
if (fromPosition < toPosition){
for (int i = fromPosition; i < toPosition; i++){
Collections.swap(cardMakerList,i,i+1);
}
}else{
for (int i = fromPosition; i > toPosition; i--){
Collections.swap(cardMakerList,i,i-1);
}
}
notifyItemMoved(fromPosition,toPosition);
return true;
}