2014-08-29 22 views
8

, özellikle MotionEvent.ACTION_DOWN (ACTION_MOVE ve ACTION_UP sonradan çalışıyoruz), tıklanabilir = "true" RecyclerView en Öğe düzenini ayarlamak gibi görünüyor tamamen bazı dokunmatik olayları tüketmek:Android: tıklanabilir bloklar onTouch olaylara set RecyclerView madde

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> 

onCreate() içinde çok temel RecyclerView kurulum sahip:

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; 
      } 
     }); 

RecyclerView'daki bu amaçlanmış davranış veya hata mı, hala bir önizleme mi?

PS. Basılı duruma tepki vermek ve tıklama üzerinde dalgalanma etkisi olması için bu dokümanların tıklanabilir olmasını istiyorum. False olarak ayarlandığında ACTION_DOWN iyi çalışıyor ancak basılan durum tetiklenmiyor ve seçilebilirBackground'un herhangi bir etkisi yok.

+0

'ayar android deneyin: Hala ACTION_DOWN istiyorsanız, örneğin, etkinlikleri içinde onu elde etmeye çalışmak odaklanabilir = "true"' ı sağlayan değilim bu yüzden, bu test değil Bir cevap olarak, ancak ACTION_DOWN bana odak ilgili olayı gibi görünüyor. – RyanJohnstone

+0

@Ija, Herhangi bir çözüm buldunuz mu? Aynı problemde birkaç günlüğüne sıkışmış durumdayım. – Manu

+0

@Manu, bunun amaçlanan bir davranış olduğunu düşünerek bitirdim. Bunun yerine, recyclerView.addOnItemTouchListener() öğesini kullanarak istediğinizi elde edebilmelisiniz. –

cevap

0

Bu amaç, bir davranış DEĞİLDİR.

Öğe tıklanabilir öğesi true olarak ayarlandığında, ACTION_DOWN tüketilecek, geri dönüşümcü görünümü ACTION_DOWN.

Neden geri dönüştürücü görünümünde onTouch() içinde ACTION_DOWN gerekli? Gerekli mi? Eğer ACTION_DOWN içinde Lasty ayarlamak isterseniz, neden bu

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; 

istiyor mu olmasın?

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