2014-08-29 3 views
8

, क्लिक करने योग्य = "true" करने के लिए RecyclerView के मद लेआउट की स्थापना की तरह लग रहा कुछ स्पर्श इवेंट पूरी तरह से उपभोग करते हैं, खासकर MotionEvent.ACTION_DOWN (ACTION_MOVE और ACTION_UP बाद में काम कर रहे हैं):एंड्रॉयड: जब क्लिक करने योग्य ब्लॉक onTouch घटनाओं के लिए सेट RecyclerView आइटम

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() में बहुत ही बुनियादी RecyclerView सेटअप करने के बाद:

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 में है क्योंकि यह अभी भी एक पूर्वावलोकन है?

पीएस। मैं चाहता हूं कि यह दबाए गए राज्य पर प्रतिक्रिया करने के लिए दस्तावेज़ों के अनुसार क्लिक करने योग्य हो और क्लिक पर लहर प्रभाव हो। जब गलत ACTION_DOWN पर सेट किया गया है ठीक काम कर रहा है लेकिन दबाया गया राज्य ट्रिगर नहीं किया गया है और चयन योग्य बैकग्राउंड का कोई प्रभाव नहीं है।

+0

'की स्थापना एंड्रॉयड का प्रयास करें:: अगर आप अभी भी ACTION_DOWN चाहते हैं, जैसे, गतिविधि में इसे पाने के लिए कोशिश फ़ोकस करने योग्य =" true "', मैं इस परीक्षण नहीं किया, जिसके कारण मैं प्रदान नहीं कर रहा हूँ यह एक उत्तर के रूप में है, लेकिन मेरे लिए ACTION_DOWN एक फोकस से संबंधित घटना की तरह लगता है। – RyanJohnstone

+0

@Iija, क्या आपको कोई समाधान मिला? मैं अभी कुछ दिनों के लिए एक ही समस्या पर फंस गया हूँ। – Manu

+0

@ मॅनू, मैंने सोचा कि यह इरादा व्यवहार है। इसके बजाय आप recyclerView.addOnItemTouchListener() के बजाय जो चाहते हैं उसे प्राप्त करने में सक्षम होना चाहिए .... –

उत्तर

0

यह इरादा व्यवहार एक बग नहीं है।

जब आइटम को क्लिक करने योग्य सत्य सेट किया गया है, तो ACTION_DOWN का उपभोग किया जाएगा, रीसाइक्लर देखें ACTION_DOWN कभी नहीं मिलेगा।

रीसाइक्लिंग व्यू के ऑन टच() में आपको ACTION_DOWN की आवश्यकता क्यों है? क्या यह आवश्यक है? आप ACTION_DOWN में lastY सेट करना चाहते हैं, क्यों नहीं इस

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; 

यह आप करना चाहते हैं?

public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (ev.getAction() == MotionEvent.ACTION_DOWN) 
    lastY = ev.getRawY(); 
    return super.dispatchTouchEvent(ev); 
संबंधित मुद्दे