In my recycler view, I need to set the header item non-swipable. I override the methods getSwipeDirs() and getMovementFlags() and returns 0 for the header position,but now also its able to swipe. What is wrong with my code.
Nb:I set my swiping to one direction only(left to right)
import android.graphics.Canvas;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.View;
import com.example.shanto.inventory.adapters.MaterialAdapter;
import com.example.shanto.inventory.adapters.MaterialDetailAdapter;
public class RecyclerItemTouchHelper_MaterialDetail extends ItemTouchHelper.SimpleCallback {
private RecyclerItemTouchHelperListener listener;
public RecyclerItemTouchHelper_MaterialDetail(int dragDirs, int swipeDirs, RecyclerItemTouchHelperListener listener) {
super(dragDirs, swipeDirs);
this.listener = listener;
}
/* @Override
public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
*//*if (viewHolder instanceof MaterialDetailAdapter.HeaderVH) return 0;
return super.getSwipeDirs(recyclerView, viewHolder);*//*
int position = viewHolder.getAdapterPosition();
return position == 0 ? 0 : super.getSwipeDirs(recyclerView, viewHolder);
}*/
@Override
public int getMovementFlags(RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder) {
if (viewHolder instanceof MaterialDetailAdapter.HeaderVH){
return makeMovementFlags(0, 0);
} else {
return makeMovementFlags(0, super.getSwipeDirs(recyclerView, viewHolder));
}
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return true;
}
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
if (viewHolder != null) {
final View foregroundView = ((MaterialDetailAdapter.MaterialVH) viewHolder).item;
getDefaultUIUtil().onSelected(foregroundView);
}
}
@Override
public void onChildDrawOver(Canvas c, RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder, float dX, float dY,
int actionState, boolean isCurrentlyActive) {
final View foregroundView = ((MaterialDetailAdapter.MaterialVH) viewHolder).item;
getDefaultUIUtil().onDrawOver(c, recyclerView, foregroundView, dX, dY,
actionState, isCurrentlyActive);
}
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
final View foregroundView = ((MaterialDetailAdapter.MaterialVH) viewHolder).item;
getDefaultUIUtil().clearView(foregroundView);
}
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder, float dX, float dY,
int actionState, boolean isCurrentlyActive) {
final View foregroundView = ((MaterialDetailAdapter.MaterialVH) viewHolder).item;
getDefaultUIUtil().onDraw(c, recyclerView, foregroundView, dX, dY,
actionState, isCurrentlyActive);
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
listener.onSwiped(viewHolder, direction, viewHolder.getAdapterPosition());
}
@Override
public int convertToAbsoluteDirection(int flags, int layoutDirection) {
return super.convertToAbsoluteDirection(flags, layoutDirection);
}
public interface RecyclerItemTouchHelperListener {
void onSwiped(RecyclerView.ViewHolder viewHolder, int direction, int position);
}
}
Here I update the code used for swiping