2014-12-02 21 views
5

Mi chiedo perché gli eventi click non vengano visualizzati se faccio clic all'interno di RecyclerView.Gli eventi di clic non vengono visualizzati in RecyclerView

mio scenario utilizza un semplice RecyclerView a mostrare alcuni TextView s, mentre il suo genitore View ha un OnClickListener registrati per eseguire qualche azione se un utente fa clic nella vista. Se clicco ad es. a TextView l'evento click bolle correttamente fino al genitore. Ma se clicco su RecyclerView il clic non bolle. La cosa strana è che, se imposto uno OnClickListener direttamente sullo RecyclerView, non viene mai attivato. Presumo che sia la radice di tutto il male.

Quindi, perché il mio RecyclerView non riceve alcun evento di clic? Perché il genitore non riceve alcun evento di clic?

Gerarchia si presenta così:

- View (has an OnClickListener) <- Why no clicks? 
    - RecyclerView (clickable=false) 
     - TextView 
     - TextView 
     .... 

ho sperimentato con setFocusable() e setClickable(), ma senza fortuna.

PS: La mia soluzione attuale imposta un OnClickListener su ogni TextView all'interno del RecyclerView e usa getParent() per propagare il clic alla vista primaria utilizzando performClick() manualmente.

+0

se io non mi manca qualcosa, lei ha ragione Il RecycleView no eventi bolla. – ByteArtisan

risposta

0

Uso il gestore classe speciale per RecyclerView, RecyclerView.OnItemTouchListener. Posso essere aggiunto dalla classe consumatrice. Ecco l'implementazione predefinita della classe handler:.

recyclerView.addOnItemTouchListener (nuova RecyclerView.OnItemTouchListener() {

 @Override 
     public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 
      //Put your code here. 
      //Called 2 times per touch, on pressdown and on release. 

      return false; //true will disable scroll view. 
     } 

     @Override 
     public void onTouchEvent(RecyclerView rv, MotionEvent e) { 
      setDefaultBottomBar(); 
     } 

     @Override 
     public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

     } 
    }); 
Problemi correlati