7

Ho implementato un SwipeRefreshLayout utilizzando un RecyclerView e ho bisogno che gli elementi del mio adattatore siano disabilitati durante lo OnRefreshListener.Disabilita clic su RecyclerView all'interno di SwipeRefreshLayout

ho provato il seguente approccio, ma il clic si verifica normalmente:

mRecyclerView.setEnabled(false); 
mRecyclerView.setClickable(false); 

risposta

14

Usare la logica che abbiamo avuto con ListAdapter. Questo disabiliterà gli elementi dell'adattatore, invece dei loro genitori.

public interface RecyclerViewItemEnabler{ 
    public boolean isAllItemsEnabled(); 
    public boolean getItemEnabled(int position); 
} 

e l'attuazione dovrebbe assomigliare a questo:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements RecyclerViewItemEnabler{ 

    @Override 
    public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) { 
     super.onViewAttachedToWindow(holder); 
     holder.itemView.setEnabled(isAllItemsEnabled()); 
     //or do this in onBindViewHolder() 
    } 
    @Override 
    public boolean isAllItemsEnabled(){ return mAllEnabled; } 

    @Override 
    public boolean getItemEnabled(int position){ 
     return true; 
    } 
    public void setAllItemsEnabled(boolean enable){ 
     mAllEnabled = enable; 
     notifyItemRangeChanged(0, getItemCount()); 
    } 

} 

Usage: mRecylerAdapter.setAllItemsEnabled(!mSwipeRefreshLayout.isRefreshing());

+0

funziona bene! Grazie mille @NikolaDespotoski! – falvojr

+1

Per qualche motivo non funziona per me. Non solo posso fare clic su ogni elemento, ma tutte le voci lampeggiano contemporaneamente al clic. Ho implementato questo codice esatto, sembra semplice ma ... – iBobb

Problemi correlati