2013-04-15 23 views
9

के अंदर दृश्यों पर OnClickListener मैं ViewPager के अंदर एक क्षैतिज स्क्रॉलव्यू हूं। को रोकने के लिए ViewPager स्क्रॉल किया जा करने के लिए जब scrollview के अंत मैं इतने पर प्रति संकेत के रूप में इस वर्ग का उपयोग तक पहुँच जाता है:कस्टम स्क्रॉल व्यू

public class CustomScrollView extends HorizontalScrollView { 

public CustomScrollView(Context p_context, AttributeSet p_attrs) { 
    super(p_context, p_attrs); 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent p_event) { 

    return true; 
} 

@Override 
public boolean onTouchEvent(MotionEvent p_event) { 


    if (p_event.getAction() == MotionEvent.ACTION_MOVE 
      && getParent() != null) { 
     getParent().requestDisallowInterceptTouchEvent(true); 
    } 

    return super.onTouchEvent(p_event); 
} 
} 

onInterCeptTouchEvent कि देखें और सब कुछ इसके अंदर करने के लिए किसी भी क्लिक उपभोग करने के लिए लगता है। जब मैंने Views को ScrollView में रखा, तो उनके OnClickListener एस को नहीं कहा जाएगा।

जब मैं onInterceptTouchEvent झूठी वापसी करता हूं, OnClickListener एस को कॉल किया जाता है, लेकिन ScrollView स्क्रॉल नहीं किया जा सकता है।

मैं ScrollView के अंदर क्लिक करने योग्य दृश्य कैसे डाल सकता हूं?

संपादित करें: रोटेम के उत्तर को लागू करने के बाद, onClickListener काम करता है, लेकिन यह न केवल क्लिक घटनाओं पर आग लगता है बल्कि दूसरों पर भी उड़ता है। इसे कैसे रोका जा सकता है?

उत्तर

5

ठीक है, एक इनाम मुझे पता चला है कि यह कैसे काम करता है शुरू करने के बाद मिनट: मैं onInterceptTouchEvent में

return super.onInterceptTouchEvent(p_event); 
+2

यदि आप केवल एक ही तर्क के साथ सुपर फोन, वहाँ (विधि ओवरराइड करने के लिए – Rotem

+0

सुनिश्चित करें कि आप पढ़ [जावाडोक] की कोई जरूरत नहीं है http://developer.android.com/ संदर्भ/एंड्रॉइड/व्यू/व्यू ग्रुप.html # ऑन इंटरसेप्ट टचएवेंट% 28android.view.MotionEvent% 29) आपकी विधियों के लिए, जो आपकी समस्या का वर्णन करता है। जैसा कि रोटेम कहते हैं, आपको इसे लागू करने की आवश्यकता नहीं है। –

11

के कार्यान्वयन के अंदर onTouchEvent पर कॉल करने का प्रयास करें और फिर झूठी वापसी करें।

+0

काम करता है, आपको बहुत बहुत धन्यवाद :) – FWeigl

1

यहाँ पूर्ण समाधान इस प्रश्न के उत्तरों का उपयोग कर रहा है।

public class CustomHorizontalScrollView extends HorizontalScrollView { 

     public CustomHorizontalScrollView(Context context) { 
       super(context); 

     } 
     public CustomHorizontalScrollView(Context context, AttributeSet attrs) { 
       super(context, attrs); 
     } 

     @Override 
     public boolean onInterceptTouchEvent(MotionEvent ev) { 
       boolean result = super.onInterceptTouchEvent(ev); 
       if(onTouchEvent(ev)) { 
         return result; 
       } else { 
         return false; 
       } 
     } 

     @Override 
     public boolean onTouchEvent(MotionEvent ev) { 
      if (ev.getAction() == MotionEvent.ACTION_MOVE 
        && getParent() != null) { 
       getParent().requestDisallowInterceptTouchEvent(true); 
      } 
       return super.onTouchEvent(ev); 
     } 

} 
संबंधित मुद्दे