OnClickListener на scrollView

У меня есть scrollView с множеством элементов

ScrollView scroller = (ScrollView)findViewById(R.id.scrollView);

Мне нужно привязать onClickListener к scrollview, чтобы я сделал

scroller.setOnClickListener(new OnClickListener() { 
            @Override
            public void onClick(View v) { 
                // This is all you need to do to 3D flip
                AnimationFactory.flipTransition(viewAnimator, FlipDirection.LEFT_RIGHT); 
            }

        });

Но это не срабатывает, когда я касаюсь. Любые идеи?

Ответ 1

Это потому, что дочерний элемент ScrollView получает событие касания пользователя, а не ScrollView. Вы должны установить атрибут clickable = false для каждого дочернего элемента ScrollView для onClickListener для работы с ScrollView.

Или альтернативой может быть установка onClickListener для каждого из детей ScrollView и управление им.

Ответ 2

Лучшее решение, похоже, помещает LinearLayout в ScrollView и устанавливает на нем setOnClickListener.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/myLayout"
        android:clickable="true"
        android:orientation="vertical">

       <!-- content here -->
   </LinearLayout>
</ScrollView>

в Управлении:

LinearLayout lin = (LinearLayout) fragment.rootView.findViewById(R.id.myLayout);

lin.setOnTouchListener(new setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Whatever
        }
});

Ответ 3

Вам нужно установить setOnClickListener непосредственно в дочернем элементе ScrollView.

Так как ScrollView может иметь только один дочерний, вы можете просто использовать этот подход:

ScrollView scrollView = //...

View.OnClickListener mOnClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // ...
}

//Set the onClickListener directly on the ScrollView child
scrollView.getChildAt(0).setOnClickListener(mOnClickListener);