Ich verwende recyclerview 22.2.0 und die Hilfsklasse ItemTouchHelper.SimpleCallback zu ermöglichen Swipe-to-abtun Option meiner Liste. Da ich jedoch eine Art Header habe, muss ich das Wischverhalten für die erste Position des Adapters deaktivieren. Da RecyclerView.Adapter keine isEnabled () -Methode hat, habe ich versucht, die Ansichtsinteraktion über die Methoden isEnabled () und isFocusable () in der ViewHolder-Erstellung selbst zu deaktivieren , hatte jedoch keinen Erfolg. Ich versuchte , die Swipe - Schwelle auf einen vollen Wert, wie anzupassen 0f ot 1f in dem SimpleCallback Methode getSwipeThreshold () , aber ohne Erfolg zu.
Einige Fragmente meines Codes sollen Ihnen helfen, mir zu helfen.
Meine Aktivität:
@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);
}
Und ich habe einen gemeinsamen Adapter mit zwei Ansichtstypen. In dem ViewHolder , in dem ich das Wischen deaktivieren möchte, habe ich Folgendes getan:
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);
}
}