2013-09-06 50 views
7

Bu sorunu gidermek için çalışıyorum: How to disable pullToRefreshScrollView from listening to touch ScrollView'ın, bunun için özelleştirilebilir sınıf oluşturmadan onTouchEvents işlemlerini engellemek için bir çözüm olduğunu merak ediyorum? ScrollView kaydırması nasıl devre dışı bırakılır?

gridView.getParent().requestDisallowInterceptTouchEvent(true); 

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

gibi tüm çözüm yöntemleri çalışmıyor neden? Onlarla sorun nedir? Google neden çalışmayan yöntemleri uygular?

cevap

18

// hiçbir şey yapmak için bir OnTouchListener kurarak scrollview

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

// Devre Dışı Kaydırma alın

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

// OnTouchListner

tvDisplayScroll.setOnTouchListener(null);  
+4

çağırmak düzeninde Bu olabilir kullanımı, işe istemiyor. –

+0

çalışır, ancak şimdi iç içe geçirilmiş scrollview ayarlayamıyorum .. – DrNachtschatten

6

kaldırarak Kaydırma etkin Deneyin ve görün:

 scrollView.setOnTouchListener(new View.OnTouchListener() { 

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

Özel bir ScrollView oluşturun ve istediğiniz yere kullanın.

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 > 

Sonra bu çözümü yapıştırdıktan

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

evet, bu çalışır, ama yukarıda yazdığım gibi, bu çözümlerden kaçınmaya çalışıyorum. Yine de teşekkürler –

+2

this.scrollable = kaydırılabilir; –

+0

İki geçersiz kılma yöntemi basitleştirilebilir: 'public boolean onTouchEvent (MotionEvent ev) {dönüş! Kaydırılabilir? false: super.onTouchEvent (ev); } 've onIntercept ile aynı ... – Pierre

İlgili konular