Estou usando o recyclerview 22.2.0 e a classe auxiliar ItemTouchHelper.SimpleCallback para habilitar a opção deslizar para dispensar em minha lista. Mas como tenho um tipo de cabeçalho, preciso desabilitar o comportamento de deslizar para a primeira posição do adaptador. Como RecyclerView.Adapter não possui o método isEnabled () , tentei desabilitar a interação da view através dos métodos isEnabled () e isFocusable () na própria criação do ViewHolder, mas não tive sucesso. Tentei ajustar o limite de furto para um valor total, como 0f ot 1f no método getSwipeThreshold () do SimpleCallback , mas também não tive sucesso.
Alguns fragmentos do meu código para ajudá-lo a me ajudar.
Minha atividade:
@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);
}
E eu tenho um adaptador comum com dois tipos de visualização. No ViewHolder que desejo desabilitar o deslizamento, fiz:
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);
}
}