2013-04-15 15 views
9

Mam poziomy widok ScrollView wewnątrz ViewPager. Aby zapobiec ViewPager być przewijane gdy koniec Scrollview osiągnięciu Używam tej klasy jako za podpowiedź na SO:OnClickListener w widokach wewnątrz niestandardowego 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 wydaje się spożywać żadnych Kliknij aby tego widoku i wszystko wewnątrz niego. Kiedy wstawię Views do tego ScrollView, ich OnClickListener s nie będą wywoływane.

Kiedy niech onInterceptTouchEvent return false, gdy OnClickListener s nazywane są, ale ScrollView nie można przewijać.

Jak umieścić w widoku klikalne widoki ScrollView?

EDYCJA: Po wprowadzeniu odpowiedzi od Rotem, onClickListener działa, ale nie tylko wywołuje zdarzenia kliknięć, ale także inne, np. Rzucanie. Jak można temu zapobiec?

Odpowiedz

5

No minut po rozpoczęciu bounty I dowiedziałem się, jak to działa:

w onInterceptTouchEvent I

return super.onInterceptTouchEvent(p_event); 
+2

jeśli tylko wywołanie super z tymi samymi argumentami, nie ma potrzeby, aby zastąpić metodę – Rotem

+0

Zapewnienie przeczytać [Javadoc] (http://developer.android.com/ reference/android/view/ViewGroup.html # onInterceptTouchEvent% 28android.view.MotionEvent% 29) dla metod, które opisują twój problem. Jak mówi Rotem, nie musisz implementować tego. –

11

spróbuj zadzwonić pod numer onTouchEvent wewnątrz implementacji onInterceptTouchEvent, a następnie zwróć wartość false.

+0

Works, bardzo dziękuję :) – FWeigl

1

Oto kompletne rozwiązanie z użyciem odpowiedzi na to pytanie.

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

} 
Powiązane problemy