Estoy tratando de agregar funcionalidad de deslizar para eliminar, así como para mostrar la lámina inferior pop-up si el artículo RecyclerView se presiona mucho. Estoy utilizando ItemTouchHelper.SimpleCallback
para deslizar para eliminar y ItemTouchListener
para mostrar pop-up en pulsación larga de material. El problema es que cuando estoy swiping el elemento a borrar su pulsación larga también detectar. Lo que quiero es que se debe pasar por alto pulsación larga cuando el artículo está siendo robó. Tengo ItemTouchHelper clase que se extiende Simplecallback para deslizar para eliminar. Lo que sigue es el código para fijar recyclerview de golpe para borrar.
ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new RecyclerItemTouchHelper(0, ItemTouchHelper.LEFT, this);
new ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(recyclerView);
Follwing es el código para agregar detector del evento click de largo.
recyclerView.addOnItemTouchListener(new NotesRecyclerTouchListener(getApplicationContext(), recyclerView, new NotesRecyclerTouchListener.ClickListener() {
@Override
public void onLongClick(View view, int position) {
Note note = notesList.get(position);
Toast.makeText(getApplicationContext(), note.getTitle() + " is log pressed!", Toast.LENGTH_SHORT).show();
View sheetView = MainActivity.this.getLayoutInflater().inflate(R.layout.view_bottom_sheet_dialog, null);
BottomSheetDialog dialog = new BottomSheetDialog(MainActivity.this);
dialog.setContentView(sheetView);
dialog.show();
}
}));
Como se ha sugerido @DavidVelasquez debe configurar una bandera cuando empieza de golpe y actuar en función de su estado en su onLongClick()
Pero onSwiped()
no es el camino a seguir. En su lugar debe usar ItemTouchHelper.SimpleCallback#onChildDraw()
el método para detectar cuando los seres banda magnética y onSwiped()
método para detectar cuando termina.
P.ej.
override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int,isCurrentlyActive: Boolean) {
if(actionState == ItemTouchHelper.ACTION_STATE_SWIPE){
setupMyFlag()
}
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
clearMyFlag()
}
Y luego simplemente comprobar esta bandera en su onLongClick ()