J'utilise recyclerview 22.2.0 et la classe d'assistance ItemTouchHelper.SimpleCallback pour activer l' option glisser pour rejeter dans ma liste. Mais comme j'ai un type d'en-tête dessus, je dois désactiver le comportement de balayage pour la première position de l'adaptateur. Comme RecyclerView.Adapter n'a pas de méthode isEnabled () , j'ai essayé de désactiver l'interaction de vue via les méthodes isEnabled () et isFocusable () dans la création de ViewHolder elle-même, mais sans succès. J'ai essayé d'ajuster le seuil de balayage à une valeur complète, comme 0f ot 1f dans la méthode getSwipeThreshold () de SimpleCallback , mais sans succès aussi.
Quelques fragments de mon code pour vous aider à m'aider.
Mon activité:
@Override
protected void onCreate(Bundle bundle) {
//... initialization
ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0,
ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
RecyclerView.ViewHolder target) {
return false;
}
@Override
public float getSwipeThreshold(RecyclerView.ViewHolder viewHolder) {
if (viewHolder instanceof CartAdapter.MyViewHolder) return 1f;
return super.getSwipeThreshold(viewHolder);
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
}
};
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
itemTouchHelper.attachToRecyclerView(recyclerView);
}
Et j'ai un adaptateur commun avec deux types de vue. Dans le ViewHolder que je souhaite désactiver le balayage, j'ai fait:
public static class MyViewHolder extends RecyclerView.ViewHolder {
public ViewGroup mContainer;
public MyViewHolder(View v) {
super(v);
v.setFocusable(false);
v.setEnabled(false);
mContainer = (ViewGroup) v.findViewById(R.id.container);
}
}