2013-09-06 5 views
7

इस समस्या को हल करने का प्रयास कर रहे हैं: How to disable pullToRefreshScrollView from listening to touch मुझे आश्चर्य है कि स्क्रॉलव्यू को टचएवेंट्स को संभालने से रोकने के लिए एक समाधान है, इसके लिए अनुकूलन योग्य वर्ग बनाये बिना? क्यों सबस्क्रॉलव्यू स्क्रॉलिंग को अक्षम कैसे करें?

gridView.getParent().requestDisallowInterceptTouchEvent(true); 

mScrollView.setOnTouchListener(new OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       return false; 
      } 
     }); 

तरह methos काम नहीं करता है? उनके साथ क्या समस्या है? Google उन विधियों को लागू क्यों करता है जो काम नहीं करते हैं?

उत्तर

18

// कुछ भी नहीं करने के लिए एक OnTouchListener की स्थापना करके scrollview

final ScrollView myScroll = (ScrollView) findViewById(R.id.display_scrollview); 

// अक्षम स्क्रॉल जाओ

myScroll.setOnTouchListener(new OnTouchListener(){ 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     return true; 
    } 
}); 

// OnTouchListner

tvDisplayScroll.setOnTouchListener(null);  
+4

मैं इस समाधान चिपकाया है आह्वान लेआउट में यह प्रयोग किया जा सकता है, यह काम करने के लिए नहीं चाहता है। –

+0

काम करता है, लेकिन अब मैं अपने नेस्टेड स्क्रॉलव्यू को स्क्रॉल नहीं कर सकता .. – DrNachtschatten

6

को हटाने के द्वारा स्क्रॉल सक्षम कोशिश करें और देखें:

 scrollView.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      return isBlockedScrollView; 
     } 
    }); 
8

कस्टम स्क्रॉलव्यू बनाएं और जहां भी चाहें उसका उपयोग करें।

class CustomScrollView extends ScrollView { 

    // true if we can scroll the ScrollView 
    // false if we cannot scroll 
    private boolean scrollable = true; 

    public void setScrollingEnabled(boolean scrollable) { 
     this.scrollable = scrollable; 
    } 

    public boolean isScrollable() { 
     return scrollable; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     switch (ev.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       // if we can scroll pass the event to the superclass 
       if (scrollable) return super.onTouchEvent(ev); 
       // only continue to handle the touch event if scrolling enabled 
       return scrollable; // scrollable is always false at this point 
      default: 
       return super.onTouchEvent(ev); 
     } 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     // Don't do anything with intercepted touch events if 
     // we are not scrollable 
     if (!scrollable) return false; 
     else return super.onInterceptTouchEvent(ev); 
    } 

} 

<com.packagename.CustomScrollView 
    android:id="@+id/scrollView" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent"> 

</com.packagename.CustomScrollView > 

फिर

((CustomScrollView)findViewById(R.id.scrollView)).setIsScrollable(false); 
+0

हाँ, यह काम करता है, लेकिन जैसा कि मैंने उपरोक्त टाइप किया है, मैं इस समाधान से बचने की कोशिश कर रहा हूं। धन्यवाद वैसे भी –

+2

this.scrollable = स्क्रॉल करने योग्य; –

+0

दो ओवरराइड विधियों को सरल बनाया जा सकता है: 'सार्वजनिक बूलियन ऑन टचवेन्ट (मोशनवेन्ट ईवी) {वापसी! स्क्रॉल करने योग्य? झूठा: super.onTouchEvent (ev); } 'और साथ ही इंटरसेप्ट के साथ ... – Pierre

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