2014-08-29 14 views
8

Sembra che l'impostazione del layout oggetto di RecyclerView a cliccabile = "true", consumare completamente alcuni eventi touch, particolarmente MotionEvent.ACTION_DOWN (ACTION_MOVE e ACTION_UP poi stanno lavorando):Android: RecyclerView voce quando impostato su blocchi cliccabili eventi onTouch

item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/demo_item_container" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:background="?android:attr/selectableItemBackground" 
    android:clickable="true"> <-- this what breaks touch event ACTION_DOWN 

....  
</LinearLayout> 

Avendo configurazione molto semplice RecyclerView in onCreate():

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list);  
... //Standard recyclerView init stuff 

//Please note that this is NOT recyclerView.addOnItemTouchListener() 
recyclerView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View view, MotionEvent motionEvent) { 
       Log.d("", "TOUCH --- " + motionEvent.getActionMasked()); 
       //Will never get here ACTION_DOWN when item set to android:clickable="true" 
       return false; 
      } 
     }); 

Questo comportamento o bug è previsto in RecyclerView perché è ancora un'anteprima?

PS. Voglio che questo sia selezionabile in base ai documenti per reagire allo stato premuto e avere un effetto a catena sul clic. Quando è impostato su false ACTION_DOWN funziona correttamente ma lo stato premuto non viene attivato e SelectableBackground non ha alcun effetto.

+0

Prova impostazione 'Android: attivabile = "true"', non ho provato questo, che è il motivo per cui non sto fornendo è come una risposta, ma ACTION_DOWN per me sembra un evento correlato al fuoco. – RyanJohnstone

+0

@Iija, hai trovato qualche soluzione? Sono bloccato sullo stesso problema da parecchi giorni ormai. – Manu

+0

@Manu, ho finito per pensare che questo è il comportamento previsto. Dovresti essere in grado di ottenere ciò che vuoi usando recyclerView.addOnItemTouchListener(), invece .... –

risposta

0

Questo comportamento non è un errore.

Quando la voce impostata selezionabile come vera, ACTION_DOWN sarà consumata, la vista del riciclatore non otterrà MAI ACTION_DOWN.

Perché è necessario ACTION_DOWN in onTouch() della visualizzazione recycler? È necessario? se si desidera impostare Lasty in ACTION_DOWN, perché non questo

case MotionEvent.ACTION_MOVE: 
     if (linearLayoutManager.findFirstCompletelyVisibleItemPosition() == 0) { 
     // initial 
     if (lastY == -1) 
      lastY = y; 

     float dy = y - lastY; 
     // use dy to do your work 

     lastY = y; 
     break; 
    case:MotionEvent.ACTION_UP: 
     // reset 
     lastY = -1; 
     break; 

Non ti vuole? se si vuole ancora l'ACTION_DOWN, cercare di ottenere in attività, come ad esempio:

public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (ev.getAction() == MotionEvent.ACTION_DOWN) 
    lastY = ev.getRawY(); 
    return super.dispatchTouchEvent(ev); 
Problemi correlati