I have a RecyclerView in which the elements will have the following logic: when clicked, the title of the element is shown, when dragged, the element is dragged, when long pressed, the description of the element is shown, when double-clicked, the element is used
Here is my code:
@Override
public void onBindViewHolder(@NonNull view_holder holder, @SuppressLint("RecyclerView") int position) {
GestureDetector gestureDetector = new GestureDetector(G.context, new GestureListener(holder,position));
holder.item_layout.setOnTouchListener((v, event) -> gestureDetector.onTouchEvent(event));
}
class GestureListener extends GestureDetector.SimpleOnGestureListener {
view_holder holder;
int position;
public GestureListener(view_holder holder, int position) {
this.holder = holder;
this.position = position;
}
@Override
public boolean onDown(MotionEvent e) {
// Working
drag_item(holder);
return true;
}
@Override
public boolean onSingleTapUp(@NonNull MotionEvent e) {
// Not working
show_item_title(holder,position);
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
// Not working
use_item(position);
return true;
}
@Override
public void onLongPress(@NonNull MotionEvent e) {
// Not working
show_item_description(items[position].item);
}
}
When drag_item() function is called then working only onDown() function.
Here is drag_item():
void drag_item(view_holder holder){
String clip_text = "This is our clip text";
ClipData.Item clip_item = new ClipData.Item(clip_text);
String[] mime_types = new String[]{ClipDescription.MIMETYPE_TEXT_PLAIN};
ClipData clip_data = new ClipData(clip_text,mime_types,clip_item);
View.DragShadowBuilder drag_shadow_builder = new View.DragShadowBuilder(holder.item_view);
holder.item_view.startDrag(clip_data,drag_shadow_builder,holder.item_view,0); // After that, the program does not work normally
}
But when I remove drag_item() then all functions are working. I mean: onDown(), onSingleTapUp(), onDoubleTap() and onLongPress()