Używam recyclinglerview 22.2.0 i klasy pomocniczej ItemTouchHelper.SimpleCallback, aby włączyć opcję przeciągnij, aby odrzucić do mojej listy. Ale ponieważ mam na nim typ nagłówka, muszę wyłączyć zachowanie przesuwania dla pierwszej pozycji adaptera. Ponieważ RecyclerView.Adapter nie ma metody isEnabled () , próbowałem wyłączyć interakcję widoku za pomocą metod isEnabled () i isFocusable () w samym tworzeniu ViewHolder, ale bez powodzenia. Próbowałem ustawić próg przesunięcia na pełną wartość, na przykład 0f ot 1f w metodzie getSwipeThreshold () SimpleCallback , ale również bez sukcesu.
Kilka fragmentów mojego kodu, które pomogą Ci mi pomóc.
Moja aktywność:
@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);
}
Mam wspólny adapter z dwoma typami widoku. W ViewHolder, który chcę wyłączyć przesuwanie, zrobiłem:
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);
}
}