Ich habe eine horizontale ScrollView in einem ViewPager. Um zu verhindern, der ViewPager gescrollt werden, wenn das Ende des Scroll erreicht ich diese Klasse zu verwenden, wie pro Hinweis auf SO:OnClickListener auf Ansichten in einem benutzerdefinierten 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);
}
}
Die onInterCeptTouchEvent
scheint in ihn jeden Klick auf diese Ansicht und alles zu konsumieren. Wenn ich Views
in das ScrollView
setze, wird ihr OnClickListener
s nicht angerufen.
Wenn ich lassen onInterceptTouchEvent
false zurückgeben, werden die OnClickListener
s aufgerufen, aber die ScrollView
kann nicht gescrollt werden.
Wie kann ich anklickbare Ansichten innerhalb dieses ScrollView
setzen?
EDIT: Nach der Implementierung von Rotems Antwort funktioniert die onClickListener
, aber es wird nicht nur auf Klickereignisse ausgelöst, sondern auch auf andere, wie Fling. Wie kann dies verhindert werden?
wenn Sie Super mit gleichen Argumente nennen, gibt es keine Notwendigkeit, die Methode zu überschreiben – Rotem
Sie die [Javadoc] Stellen Sie sicher, lesen (http://developer.android.com/ Referenz/android/view/ViewGroup.html # onInterceptTouchEvent% 28android.view.MotionEvent% 29) für Ihre Methoden, die Ihr Problem beschreibt. Wie Rotem sagt, müssen Sie dieses nicht implementieren. –