2013-04-15 4 views
9

Я havin горизонтальный ScrollView внутри ViewPager. Для того, чтобы предотвратить ViewPager прокручиваться, когда конец ScrollView достигается я использую этот класс в соответствии с намеком на SO:OnClickListener on Views внутри пользовательского 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 s не будет вызываться.

Когда я дам onInterceptTouchEvent return false, вызываются OnClickListener s, но нельзя прокручивать ScrollView.

Как я могу разместить интерактивные представления внутри этого ScrollView?

РЕДАКТИРОВАТЬ: После выполнения ответа Ротема работает onClickListener, но он не только запускает события кликов, но и других, например, бросает. Как это можно предотвратить?

ответ

5

Ну минут после начала баунти я узнал, как это работает:

onInterceptTouchEvent в I

return super.onInterceptTouchEvent(p_event); 
+2

если вы только вызвать супер с теми же аргументами, что нет никакой необходимости переопределять метод – Rotem

+0

Убедитесь, что вы читали [Javadoc] (http://developer.android.com/ reference/android/view/ViewGroup.html # onInterceptTouchEvent% 28android.view.MotionEvent% 29) для ваших методов, которые описывают вашу проблему. Как говорит Ротем, вам не нужно это реализовывать. –

11

попытайтесь позвонить onTouchEvent внутри реализации onInterceptTouchEvent, а затем вернуть false.

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

} 
Смежные вопросы